javascript中常用的遍历函数

279 阅读4分钟

1.forEach 方法

  • forEach() 方法没有返回值,总是返回undefined。
  • forEach() 传入方法作为该方法的参数。
  • forEach() 参数传入的方法有三个形参。
  • forEach() 不会改变原始数组。

传入方法的三个参数分别是:

  • value 当前循环中的元素值 (必选)
  • index 当前循环中的索引值 (可选)
  • array 当前遍历的数组 (可选)

注: 该方法可理解为仅仅遍历了一边数组,没有返回值。

   const arr = [1,2,3,4,5,6,7];
   const newArr = arr.forEach((value,index,array)=>{
       console.log(value,index,array);
   }) 
   console.log(newArr) // undefined

2.map 方法

  • map() 返回一个新数组,新数组的长度与原数组长度相同,数组元素为循环内处理的结果。
  • map() 传入方法作为该方法的参数。
  • map() 参数传入的方法有三个形参。
  • map() 不会改变原始数组。

传入方法的三个参数分别是:

  • value 当前循环中的元素值 (必选)
  • index 当前循环中的索引值 (可选)
  • array 当前遍历的数组 (可选)

注: 该方法经常使用、注意返回数组的长度与原数组相同

  const arr = [1, 2, 3, 4, 5, 6, 7];
  const newArr = arr.map((value, index, array) => {
    console.log(value, index, array);
    return value * 2;
  });
  console.log(newArr); // [2, 4, 6, 8, 10, 12, 14]

3.filter 方法

  • filter() 返回一个新数组,新数组的长度可能会改变,数组元素为循环内处理的结果。
  • filter() 传入方法作为该方法的参数。
  • filter() 参数传入的方法有三个形参。
  • filter() 不会改变原始数组。

传入方法的三个参数分别是:

  • value 当前循环中的元素值 (必选)
  • index 当前循环中的索引值 (可选)
  • array 当前遍历的数组 (可选)

注: 过滤器方法,只返回满足条件的元素值,(返回的新数组中,只包含满足条件的值)

  const arr = [1, 2, 3, 4, 5, 6, 7];
  const newArr = arr.filter((value, index, array) => {
    if (value > 5) {
      return value;
    }
  });
  console.log(newArr); // [6, 7]

4.some 方法

  • some() 用于判断数组中是否有元素满足条件。
  • some() 传入方法作为该方法的参数。
  • some() 参数传入的方法有三个形参。
  • some() 返回boolean值
  • some() 不会改变原始数组。
  • some() 循环数组的每个元素。
    • 如果有一个元素满足条件,则直接返回 true并停止循环
    • 如果没有满足条件的元素,则返回 false

传入方法的三个参数分别是:

  • value 当前循环中的元素值 (必选)
  • index 当前循环中的索引值 (可选)
  • array 当前遍历的数组 (可选)

注:该方法可用于数组扁平化等一系列情况

  const arr = [1, 2, [3, [4, 5]]];
  const flatten = (arr) => {
    while (arr.some((item) => Array.isArray(item))) {
      arr = [].concat(...arr);
    }
    return arr;
  };
  console.log(flatten(arr));//[1,2,3,4,5]

5.every 方法

  • every() 用于检测数组所有元素是否都符合指定条件。
  • every() 传入方法作为该方法的参数。
  • every() 参数传入的方法有三个形参。
  • every() 返回boolean值
  • every() 不会改变原始数组。
  • every() 循环数组的每个元素。
    • 如果数组中检测到有一个元素不满足,则直接返回 false并停止循环
    • 如果所有元素都满足条件,则返回 true

传入方法的三个参数分别是:

  • value 当前循环中的元素值 (必选)
  • index 当前循环中的索引值 (可选)
  • array 当前遍历的数组 (可选)

注: 该方法可与some 对比来记

  const arr = [1, 2, 3, 4, 5, 6, 7];
  let judge = arr.every((value) => {
    return value > 0;
  });
  console.log(judge); //true

6.reduce 方法

我对该函数的理解就是作为累加器呀等等一些操作,他十分的方便,大家可以去尝试使用一下

  • reduce() 可以理解为他就是将数组从左至右不断累积操作,最终变为一个值。
  • reduce() 传入方法作为该方法的第一个参数。还有一个可选初始值作为第二个参数。如果不传第二个参数,则初始值为数组第一个元素值。
  • reduce() 参数传入的方法有四个形参。

传入方法的四个参数分别是:

  • pre 当前循环中的元素值 (必选)
  • cur 当前循环中的元素值 (必选)
  • index 当前循环中的索引值 (可选)
  • array 当前遍历的数组 (可选)
const arr = [1, 2, 3, 4, 5, 6, 7];
let sum = arr.reduce((pre, cur, index, array) => {
    console.log(pre, cur, index, array);
    return pre + cur;
}, 0);
console.log(sum); //28

const obj = {
    name: "yxj",
    info: {
      address: {
        location: "北京",
      },
    },
};
const attrs = ["info", "address", "location"];
const loc = attrs.reduce((newObj, k) => newObj[k], obj);
console.log(loc);//"北京",

7. find 方法

  • find() 查找第一个满足条件的值,返回这个元素,如果没有符合的返回undefined
  • find() 不会改变原始数组。
  • find() 传入方法作为该方法
  • find() 参数传入的方法有三个形参。

传入方法的三个参数分别是:

  • value 当前循环中的元素值 (必选)
  • index 当前循环中的索引值 (可选)
  • array 当前遍历的数组 (可选)
  const arr = [1, 2, 3, 4, 5, 6, 7];
  const ret = arr.find((value) => {
    return value > 2;
  }, 0);
  console.log(ret); //3

8. findIndex 方法

与find类似,只是返回的是第一个满足条件元素的索引值

  const arr = [1, 2, 3, 4, 5, 6, 7];
  const ret = arr.findIndex((value) => {
    return value > 2;
  }, 0);
  console.log(ret); //2

如有笔误请与我联系,以上仅作为自己整理的笔记。