JavaScript——关于数组(1)

本文详细介绍了JavaScript中数组的创建方式、常用操作方法(如push、pop、sort等)、查找方法(indexOf、lastIndexOf)以及遍历方法(forEach、map等)。此外,还讨论了sort方法的定制和数组迭代是否改变原数组的问题。
摘要由CSDN通过智能技术生成

let arr = [1,2];

Object.prototype.toString.call(arr) === ‘[object Array]’; // true

JS中有哪些数组方法


  1. 创建数组的方法
  • 字面量创建:

const arr = [];

  • 使用Array构造函数:

const arr = new Array();

arr[0] = 1;

arr[1] = 2;

// 一个参数表示创建length为num的数组

const arr = new Array(3)

//多个参数表示创建包含这几项的数组

const arr = new Array(‘red’,‘yellow’,‘blue’)

算法题中,常使用new Array()来初始化固定length的数组:

const arr = new Array(7); // 表示创建一个长度为7的数组

再者,还可以通过fill()方法来初始化数组里面的值:

const arr = new Array(7).fill(1); // [1,1,1,1,1,1,1]

需要注意的是fill()有它的局限性,当给fill()传入一个参数时,如果这个参数是引用类型,那么fill()填充数组时填充的是入参的引用.比如初始化二维数组:

const arr = new Array(7).fill([]); // [[],[],[],[],[],[],[]]

arr[0][0] = 1;

console.log(arr); // [[1], [1], [1], [1], [1], [1], [1]];

可以看到,我们修改了第一个数组的值,后面的数组全都跟着更改了.

本着安全的原则,初始化二维数组可以用for循环:

const arr = new Array(7);

for (let i = 0; i < arr.length; i++) {

arr[i] = [];

}

  1. 操作数组的方法

| 方法 | 说明 | 返回值 | 是否改变原数组 |

| :-: | :-: | :-: | — |

| push() | 数组末尾添加任意项 | 返回修改后数组的长度 | 是 |

| pop() | 移除数组最后一项 | 返回移除的项 | 是 |

| shift() | 移除数组第一项 | 返回移除的项 | 是 |

| unshift() | 数组首位添加任意项 | 返回修改后数组的长度 | 是 |

| reverse() | 反转数组 | 返回修改后的数组 | 是 |

| sort() | 数组排序 | 返回修改后的数组 | 是 |

| splice() | 本质是:第一个参数为起始位置

第二个参数为删除的个数

第三个参数为插入的项

根据这个原理可实现三个功能,即删除,插入,替换 | 返回移除的项 | 是 |

| concat() | 拼接两个数组 | 返回一个新数组 | 否 |

| slice() | 接收一个参数,返回以该参数为索引到当前数组末尾的所有项

接收两个参数,返回起始到结束位置之间的项,注意不包括结束位置的项 | 返回一个新数组 | 否 |

  • sort()
  1. 默认情况下,sort按照升序排列数组项.该方法会调用每个数组项的toString()方法,然后比较得到的字符串,再确定如何排序.即使数组中的每一项都是数值,sort方法得到的也是字符串.

  2. sort()可以接收一个compare函数作为参数,来决定排序的规则.

compare函数接收两个参数a,b:

  • 若排序后的数组a应该出现在b之前,则返回一个负数;

  • 若排序后的数组a应该出现在b之后,则返回一个正数;

  • 若两个参数相等,则返回0;

根据compare的规则,升序的sort可以传入一个compare函数:

function compare(a, b) {

if (a < b) {

return -1; // 由于是升序,所以当a小于b时,a应该在b之前,返回负数

} else if (a > b) {

return 1; // 由于是升序,所以当a大于b时,a应该在b之后,返回正数

} else {

return 0;

}

}

进一步,可以简写成:

function compare(a, b) {

return a - b;

}

同样的,如果想实现一个降序的sort,可以传入一个compare函数:

function compare(a, b) {

return b - a;

}

  1. 查找数组的方法

indexOf()lastIndexOf()

接收两个参数——要查找的项和表示查找起点位置的索引(可选参数).其中,indexOf()从数组的开头开始向后查找,而lastIndexOf()从数组的结尾开始向前查找.

这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1.

在比较第一个参数与数组中的每一项时,会使用全等操作符===.也就是说,要求查找的项必须严格相等:

var person = {name:‘li’}

var people = [{name:‘li’}]

console.log(people.indexOf(person))//-1

var morePeople = [person]

console.log(morePeople.indexOf(person))//0

  1. 遍历数组的方法

| 名称 | 参数 | 返回值 | 说明 |

| :-: | :-: | :-: | :-: |

| forEach | item,index,arr | undefined | return true会终止当前迭代,不会终止整体迭代 |

| some | item,index,arr | boolean | some 方法查找数组中是否有满足条件的元素,如果找到第一个满足条件的元素,则return true终止循环. 不再继续查找 |

| every | item,index,arr | boolean | every方法查找数组中是否所有元素都满足条件,如果都满足,返回true,有一个不满足则返回false并终止循环 |

| filter | item,index,arr | 返回过滤后的数组 | filter方法创建一个新的数组,主要用于筛选数组,

filter中的回调函数有一个要求: 必须返回一个boolean

当返回true时, 函数内部会自动将这次回调的 currentValue 加入到新的数组中

当返回false时, 函数内部会过滤掉这次的 currentValue |

| map | item,index,arr | 返回新的数组 | map方法也是创建一个数组,新数组中的元素是通过回调函数的返回值决定的 |

| find | item,index,arr | 匹配的item值 | find用于筛选原数组中符合条件的某一项,找到则终止循环 |

| findIndex | item,index,arr | 匹配的index值,找不到则返回-1 | findIndex类似于find,用于筛选原数组中符合条件的某一项的索引,找到则终止循环 |

| reduce | (preValue,curValue,index,arr)=> {},initValue | 最后一次迭代的return值 | reduce() 常用于对数组中所有的元素进行汇总,上述代码中 preValue 指的是前一次遍历中的 return 值可以设置它的初始值(如上述代码中初始值为0 ) |

数组迭代方法能否改变原数组?


forEach为例

  1. 原数组的item是基本数据类型:

const array = [1, 2, 3, 4];

array.forEach(item => {

item = item * 3

})

console.log(array); // [1,2,3,4]未改变原数组

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

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

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

img

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

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

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

最后

正值金三银四招聘旺季,很多小伙伴都询问我有没有前端方面的面试题,特地整理出来赠送给大家!

资料领取方式:点击这里前往免费获取

入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

[外链图片转存中…(img-XBTuKbrK-1713500900243)]

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

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

[外链图片转存中…(img-cY0tymaH-1713500900243)]

最后

正值金三银四招聘旺季,很多小伙伴都询问我有没有前端方面的面试题,特地整理出来赠送给大家!

资料领取方式:点击这里前往免费获取

前端资料图.PNG

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值