一、各自的介绍:

  map:

  map 用于遍历数组的每个元素,并在方法体内进行处理后,将处理后的结果进行返回,返回的结果会在新的数组上的对应旧数组上该元素的下标存储;如果不设置返回值,那么 新数组上与旧数组该元素相同下标中存储 null;即新数组和旧数组长度是一样的;

    let tempArr1 = [1, 3, 5, 7];
    let newTempArr1 = tempArr1.map(function (currentValue, index, arr) {
        console.info('currentValue:', currentValue, 'index:', index, 'arr:', arr);
        if (currentValue == 3) {
            return;
        }
        return currentValue * currentValue;
    });
    //  currentValue: 1 index: 0 arr: (4) [1, 3, 5, 7]
    //  currentValue: 3 index: 1 arr: (4) [1, 3, 5, 7]
    //  currentValue: 5 index: 2 arr: (4) [1, 3, 5, 7]
    //  currentValue: 7 index: 3 arr: (4) [1, 3, 5, 7]
    console.info(JSON.stringify(tempArr1));  //  [1,3,5,7]
    console.info(JSON.stringify(newTempArr1));  //  [1,null,25,49]

  filter:

  filter 用于遍历数组的每个元素,并在方法体内进行条件过滤后,将过滤后的结果,通过 boolean 类型来判断返回;如果符合条件的就返回 true,不符合条件就返回 false;返回 true 就会把旧数组上该下标存储的值加入到新的数组中;返回 false 就会过滤掉这个下标存储的值;

    let tempArr2 = [1, 3, 5, 7];
    let newTempArr2 = [];
    newTempArr2 = tempArr2.filter(function (currentValue, index, arr) {
        console.info('currentValue:', currentValue, 'index:', index, 'arr:', arr);
        return currentValue != 1;
    });
    //  currentValue: 1 index: 0 arr: Array(4)
    //  currentValue: 3 index: 1 arr: Array(4)
    //  currentValue: 5 index: 2 arr: Array(4)
    //  currentValue: 7 index: 3 arr: Array(4)
    console.info(JSON.stringify(tempArr2));  //  [1,3,5,7]
    console.info(JSON.stringify(newTempArr2));  //  [3,5,7]

  reduce:

    reduce((previousValue, currentValue, currentIndex, array) => { /* ... */ }, initialValue)

  reduce 方法中有两个参数:

  • callbackFn (回调函数,里面有四个参数):
    • previousValue:上一次调用 callbackFn 时的返回值;在第一次调用时,若指定了初始值 initialValue,那么它的值就是 initialValue,否则为数组索引为 0 的元素 array[0];
    • currentValue:数组中正在处理的元素;在第一次调用时,若指定了初始值 initialValue,那么它的值为数组索引为 0 的元素 array[0],否则为 array[1];
    • currentIndex:数组中正在处理的元素的索引;如果制订了初始值 initialValue,则其实索引号为 0,否则从索引 1 起始;
    • array:用于遍历的数组;
  • initialValue (非必填):
    • 作为第一次调用 callbackFn 函数时参数 previousValue 的值;若指定了初始值 initialValue,则 currentValue 则将使用数组的第一个元素;否则 previousValue 将使用数组第一个元素,而 currentValue 将使用数组的第二个元素;

  reduce 用于遍历数组的每个元素,并会把上一次处理返回值放到此次处理的方法体中,可以将数组中的每个元素从前往后互动起来处理;如果是第一个元素,那么 便从第二个元素开始;

    let tempArr3 = [1,3,5,7];
    let newTempArr3 = [];
    newTempArr3 = tempArr3.reduce(function(previousValue, currentValue, index, arr) {
        console.info('previousValue:', previousValue,'currentValue:', currentValue, 'index:', index, 'arr:', arr);
        return previousValue + currentValue;
    });
    //  previousValue: 1 currentValue: 3 index: 1 arr: (4) [1, 3, 5, 7]
    //  previousValue: 4 currentValue: 5 index: 2 arr: (4) [1, 3, 5, 7]
    //  previousValue: 9 currentValue: 7 index: 3 arr: (4) [1, 3, 5, 7]
    console.info(JSON.stringify(tempArr3));  //  [1,3,5,7]
    console.info(JSON.stringify(newTempArr3));  //  16

二、异同:

  1、相同点:

  • 都不会对原有的数组造成影响;
  • 都返回一个操纵后的新值;
  • map 和 filter 的方法体内的入参都相同,reduce 方法体内 多了一个 previousValue,其他部分相同;

  2、不同点:

  • map 在对数组所有元素进行遍历的情况下,对每个元素进行操作后,并在对应下标下存储返回后的数值(未返回则未undefined),返回一个与旧数组长度相同的新数组;
  • filter 在对数组所有元素进行遍历的情况下,对每个元素进行方法体内的条件过滤,满足条件的返回 true,并塞入到新数组中,不满足的则返回 false,不移入新数组中;
  • reduce 在对数组所有元素进行遍历的情况下,能够记录上一个元素操作后的返回值,并在方法体内进行操作,最终返回一个操作后的一个值;
posted on 2022-07-22 17:54  冷漠「」  阅读(159)  评论(0编辑  收藏  举报