遍历数组的12中方法

162 阅读2分钟

1.for循环

   // 使用临时变量,将长度缓存下来,避免重复获取数组长度,当数组较大时优化效果明显
   const len = arr.length;
   for (let i = 0; i < len; i++) {
      // ...
   }

for循环、for...in、for...of能正确响应break、continue和return语句,但forEach不行。

2.for...in

   for (let item in arr) {
      // ...
   }

for...in循环效率是最低的

3.forEach

  • forEach不会对空数组进行检测
  • 不能在它的循环体中使用 await
  • 不能提前退出 .forEach() 循环。而在 for 循环中可以使用 break
   arr.forEach((item, index, arr) => {
      // ...
   })

item:每个元素, index:每个元素在数组中下标, arr:数组本身

4.map

  • map有返回值
  • map和forEach都不会对空数组进行检测
  • map不会改变原数组
   const res = arr.map((item, index, arr) => {
       return item * 2;
   });

5.for...of

  • 只有可迭代对象(iterator)才能使用(Array、Map、Set、String、TypedArray、arguments对象等等)
  • 可以使用 await
  • 可以使用break提前退出循环
   for (let i of arr) {
      // ...
   }

6.filter

接收回调函数作为参数,返回值是一个新数组

  • filter不会对空数组进行检测
  • filter不会改变原始数组
  const res = arr.filter(item => {
     // ...
  });

7.every 如果每一项返回true, 则返回true(全部符合条件) 如果存在一项返回false, 则返回false, 并中止循环

  • every不会对空数组进行检测
  • every不会改变原始数组
   const res = arr.every((item, index, arr) => {
      return item > 3;
   })

8.some 如果某一项返回true, 则返回true, 并中止循环 如果全部返回false, 则返回false

  • some不会对空数组进行检测
  • some不会改变原始数组
   const res = arr.some((item, index, arr) => {
      return item > 3;
   })

9.reduce reduce顺着挨个累加,对于空数组是不会执行回调函数

   const arr = [1,2,3];
   // 没有指定初始值
   arr.reduce((initalValue, currentValue, index, arr) => {
      console.log(initalValue); // 第一次循环,initalValue = 1
   });
   
   // 给了初始值之后
   arr.reduce((initalValue, currentValue, index, arr) => {
      console.log(initalValue); // 第一次循环,initalValue = 10
   }, 10);

10.reduceRight reduceRight倒着挨个累加,遍历的是空数组的话,不会执行

   const arr = [1,2,3];
   // 没有指定初始值
   arr.reduceRight((initalValue, currentValue, index, arr) => {
      console.log(initalValue); // 第一次循环,initalValue = 3
   });
   
   // 给了初始值之后
   arr.reduceRight((initalValue, currentValue, index, arr) => {
      console.log(initalValue); // 第一次循环,initalValue = 10
   }, 10);

11.find 找到符合条件的第一项,没找到返回undefined, 对于空数组是不会执行的,不会改变原数组

   const item = arr.find(item => {
      return item.name === 'name'
   })

12.findIndex 返回符合条件的第一项的下标,没有则返回-1,对于空数组是不会执行的,不会改变原数组

   const findIndex = arr.findIndex(item => {
      return item.name === 'name'
   })

13.keys、values、entries 他们都返回一个遍历器对象,可以用for...of循环遍历 keys-返回元素索引 values-返回元素本身 entries-返回元素和下标

   const arr = ['a', 'b', 'c'];
   for (let index of arr.keys()) {
      // ...
      // 0
      // 1
      // 2
   }
   
   for (let ele of arr.values()) {
      // ...
      // a
      // b
      // c
   }
   
   for (let [index, ele] of arr.entries()) {
      // ...
      // 0 'a'
      // 1 'b'
      // 2 'c'
   }