JavaScript Array 对象,前端面试题合集

本文详细介绍了JavaScript中数组的创建、访问、修改、新增操作,以及Array对象的属性和方法,如length、indexOf、lastIndexOf、sort、join、split等,帮助读者掌握数组在编程中的基本使用和高级技巧。
摘要由CSDN通过智能技术生成
  • 访问数组

  • 数组中包含对象元素、函数、数组:

  • 使用数组对象预定义属性和方法:

  • Array 对象

      • 数组属性
  • Array 对象方法

        • 查询数组中 是否存储了某一个数值【indexOf】【lastIndexOf】
  • 将数组存储的数值 按照大小顺序进行排列【sort】

  • 数组 和 字符串 的相互转化【join】【split】

  • 删除数组中指定的数据单元【splice】

  • 新增 【unshift】【push】 删除【shift】【pop】

  • 数组的反转【reverse】

  • 数组的拼接【concat】

  • 数组的截取【slice】

什么是数组?

====================================================================

数组对象是使用单独的变量名来存储一系列的值。

如果你有一组数据(例如:车名字),存在单独变量如下所示:

var car1=“Saab”;

var car2=“Volvo”;

var car3=“BMW”;

如果你想从很多数据中找出想要的数据,最好的方法就是用数组。

数组可以用一个变量名存储所有的值,并且可以用变量名访问任何一个值。

数组中的每个元素都有自己的的ID,以便它可以很容易地被访问到。

创建一个数组

创建一个数组,有三种方法。

下面的代码定义了一个名为 myCars的数组对象:

1: 常规方式:

var myCars=new Array();

myCars[0]=“Saab”;

myCars[1]=“Volvo”;

myCars[2]=“BMW”;

2: 构造函数语法

var 变量 = new Array();

var myCars=new Array(“Saab”,“Volvo”,“BMW”);

3: 常用语法 字面量

var 变量 = [ 数据1 , 数据2 , 数据3 … ];

在 [ ] 中 定义 要存储的多个数据

每个数据之间使用 逗号 间隔

var myCars=[“Saab”,“Volvo”,“BMW”];

访问数组

通过指定数组名以及索引,可以访问某个特定的元素。(第一个元素索引是从 0 开始)

//可以访问myCars数组的第一个值:

var name=myCars[0];

//修改了数组 myCars 的第一个元素:

myCars[0]=“Opel”;

数组中包含对象元素、函数、数组:

myArray[0]=Date.now;

myArray[1]=myFunction;

myArray[2]=myCars;

使用数组对象预定义属性和方法:

var x=myCars.length // myCars 中元素的数量

var y=myCars.indexOf(“Volvo”) // “Volvo” 值的索引值

Array 对象

======================================================================

Array 对象用于在变量中存储多个值:

var cars = [“Saab”, “Volvo”, “BMW”];

数组属性

| 属性 | 描述 |

| — | — |

| constructor | 返回创建数组对象的原型函数。 |

| length | 设置或返回数组元素的个数。 |

| prototype | 允许你向数组对象添加属性或方法。主要作用:对数组进行扩展 |

1.length

每一个数组,天生就有 length 属性 表示数组长度 也就是 数组单元个数

调用方式 数组.length

最后一个单元的索引下标是数组.length-1

//需要注意的是,直接给数组的 length 赋一个新的值会导致数组大小的变化:

var arr = [1, 2, 3];

arr.length; // 3

arr.length = 6;

arr; // arr 加长为 [1, 2, 3, undefined, undefined, undefined]

arr.length = 2;

arr; // arr 缩短为 [1, 2]

//数组可以通过索引把对应的元素修改为新的值。

//如果通过索引赋值时,索引超过了范围,同样会引起数组大小的变化:

var arr = [1, 2, 3];

arr[5] = “x”;

arr; // arr 变为 [1, 2, 3, undefined, undefined, “x”]

数组的修改和新增

数组的修改:

数组[索引下标] = 数值

本质上 是 对 数组单元 重新赋值

后赋值的数据覆盖之前的数据

效果就是修改数组单元存储的数据

数组的新增:

数组[索引下标] = 数值

本质上 是 对 没有的索引下标赋值

也就是 新增一个数组单元 存储数据

同时 人为的定义数组单元的索引下标

新增数组单元的索引下标必须连续

原始数组 最后一个索引下标是 数组.length-1

新增数组单元的索引下标是 数组.length-1+1

也就是 数组.length

var arr = [1,2,3,4,5];

// 将3 修改为 ‘北京’

// 也就是对 存储3的 单元 重新 赋值 字符串’北京’

// 也就是对 索引下标是 2的单元重新赋值 字符串’北京

// 已有的单元,索引下标是修改

arr[2] = ‘北京’;

// 没有的单元 是 新增

arr[5] = ‘新增’;

//

arr[arr.length] = ‘新增’;

console.log(arr); //控制台输出如下

//Array(7)

//0: 1

//1: 2

//2: “北京”

//3: 4

//4: 5

//5: “新增”

//6: “新增”

//length: 7

2.prototype 返回对象类型原型的引用 (主要作用:对数组进行扩展)

//向数组中添加 max 方法, 使得数组可以使用 max() 取得 最大值

function max() {

var ele = this[0];

for(var i = 0; i < this.length-1; i++) {

ele = this[i] > this[i+1] ? this[i] : this[i+1];

}

return ele;

}

Array.prototype.max = max;

[1,2,5,4,6].max() // 6

Array 对象方法

| 方法 | 描述 |

| — | — |

| concat() | 连接两个或更多的数组,并返回结果。 |

| copyWithin() | 从数组的指定位置拷贝元素到数组的另一个指定位置中。 |

| entries() | 返回数组的可迭代对象。 |

| every() | 检测数值元素的每个元素是否都符合条件。 |

| fill() | 使用一个固定值来填充数组。 |

| filter() | 检测数值元素,并返回符合条件所有元素的数组。 |

| find() | 返回符合传入测试(函数)条件的数组元素。 |

| findIndex() | 返回符合传入测试(函数)条件的数组元素索引。 |

| forEach() | 数组每个元素都执行一次回调函数。 |

| from() | 通过给定的对象中创建一个数组。 |

| includes() | 判断一个数组是否包含一个指定的值。 |

| indexOf() | 搜索数组中的元素,并返回它所在的位置。 |

| isArray() | 判断对象是否为数组。 |

| join() | 把数组的所有元素放入一个字符串。 |

| keys() | 返回数组的可迭代对象,包含原始数组的键(key)。 |

| lastIndexOf() | 搜索数组中的元素,并返回它最后出现的位置。 |

| map() | 通过指定函数处理数组的每个元素,并返回处理后的数组。 |

| pop() | 删除数组的最后一个元素并返回删除的元素。 |

| push() | 向数组的末尾添加一个或更多元素,并返回新的长度。 |

| reduce() | 将数组元素计算为一个值(从左到右)。 |

| reduceRight() | 将数组元素计算为一个值(从右到左)。 |

| reverse() | 反转数组的元素顺序。 |

| shift() | 删除并返回数组的第一个元素。 |

| slice() | 选取数组的一部分,并返回一个新数组。 |

| some() | 检测数组元素中是否有元素符合指定条件。 |

| sort() | 对数组的元素进行排序。 |

| splice() | 从数组中添加或删除元素。 |

| toString() | 把数组转换为字符串,并返回结果。 |

| unshift() | 向数组的开头添加一个或更多元素,并返回新的长度。 |

| valueOf() | 返回数组对象的原始值。 |

查询数组中 是否存储了某一个数值【indexOf】【lastIndexOf】

数组.indexOf()

查询匹配数据 第一次出现的位置

如果 有 匹配数据 返回值 是 存储这个数据单元的索引下标

如果没有 匹配数据 返回结果是 -1

数组.lastIndexOf()

查询匹配数据 最后一次出现的位置

如果 有 匹配数据 返回值 是 存储这个数据单元的索引下标

如果没有 匹配数据 返回结果是 -1

var arr = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5];

console.log(arr); //控制台 输出 Array(15)

// 查找 3 第一次出现的位置 返回的是 第一个3 存储单元的 索引下标

console.log( arr.indexOf( 3 ) ); // 2

// 查找 3 最后一次出现的位置 返回的是 最后一个3 存储单元的 索引下标

console.log( arr.lastIndexOf( 3 ) ); // 12

// 如果没有匹配的数据 返回结果是 -1

// 查找匹配 执行的是 严格比较/全等判断 ===

console.log( arr.lastIndexOf( ‘3’ ) ); // -1

将数组存储的数值 按照大小顺序进行排列【sort】

数组.sort()

默认 按照首字符 数值大小顺序 进行排序

首字符相同情况 按照 之后的 字符 依次排序

不是按照实际数值大小进行排序

数组.sort(function(a,b){return a-b});

按照数值大小 从 小 至 大 排续

sort() 中 定义的 参数是 一个 匿名函数

匿名函数 还要定义两个参数 两个参数名称可以任意定义

匿名函数 的返回值 return 是 参数1 - 参数2

数组.sort(function(a,b){return b-a});

按照数值大小 从 大 至 小 排续

sort() 中 定义的 参数是 一个 匿名函数

匿名函数 还要定义两个参数 两个参数名称可以任意定义

匿名函数 的返回值 return 是 参数2 - 参数1

一般只对 存储 数值的数组 进行排序

var arr = [312,6543435,432,543,956354,453,56,87,65,75436,345,423,4,32,54,88765,7654,74321,4543];

// 默认按照 首字符大小顺序排序

arr.sort();

console.log( arr );

var arr1 = [312,6543435,432,543,956354,453,56,87,65,75436,345,423,4,32,54,88765,7654,74321,4543]

// 按照数值大小 从 小 至 大 排序

arr1.sort(function(min,max){return min-max});

console.log( arr1 );

var arr2 = [312,6543435,432,543,956354,453,56,87,65,75436,345,423,4,32,54,88765,7654,74321,4543]

// 按照数值大小 从 大 至 小 排序

arr2.sort(function(min,max){return max-min});

console.log( arr2 );

数组 和 字符串 的相互转化【join】【split】

数组.join()

获取数组单元存储的数据 拼接转化为 字符串

默认获取数组单元存储的数据 以 逗号 为间隔 拼接为 字符串

在 join() 中 可以定义 间隔符号

如果不需要间隔符号 在 join() 中 设定 空字符串

字符串.split()

将 字符串 分割为 数组

默认是将 字符串作为一个整体 转化为 数组单元

在 () 中 可以设定 分割字符串的 间隔符号

分割的数据单元 没有 间隔符号

如果没有 间隔符号 还希望 将每一个字符分割为 一个 数据单元 间隔符号可以设定为 空字符串

屏蔽文章内容中的关键词

var arr1 = [1,2,3,4,5];
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是附赠给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等

详细大厂面试题答案、学习笔记、学习视频等资料领取,点击资料领取直通车免费领取!

前端视频资料:
从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中…(img-uiUHxbSx-1712115420363)]

[外链图片转存中…(img-YEGXu56z-1712115420364)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-0WySCs9Z-1712115420364)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是附赠给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等

详细大厂面试题答案、学习笔记、学习视频等资料领取,点击资料领取直通车免费领取!

[外链图片转存中…(img-AJsGuV6p-1712115420364)]

前端视频资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值