美文网首页
reduce和map

reduce和map

作者: 橘子柚子橙子_ | 来源:发表于2018-08-06 00:30 被阅读0次

复习一下reduce和map

reduce

定义

reduce()方法接受一个函数作为累加器,数组中的每个值(从左向右)开始缩减,最后累加为一个值。

语法

arr.reduce(callback[, initialValue]

callback接受四个参数,分别为:

  1. accumulator:累加器累加回调的返回值;它是上一次调用回调返回的累加值,或者是initialValue
  2. currentValue: 数组中正在处理的元素
  3. currentIndex(可选): 数组中正在处理的当前元素的索引。如果提供了initialValue,则为0,否则为1
  4. array: 调用reduce方法的数组
    reduce接受的另外一个参数是initialValue。该参数作为第一次调用callback第一个参数的值。如果未提供,则将使用数组的第一个元素

示例

let arr = [0,1,2,3,4];
function callbackFun(accumulator, currentValue, currentIndex, array) {
    return accumulator + currentValue;
}
arr.reduce(callbackFun); // 10

执行过程如下图:


reduce执行过程(图片来自网络).png

如果给reduce方法设置了第二个参数:

let arr = [1,2,3,4];
function callbackFun(accumulator, currentValue, currentIndex, array) {
    return accumulator + currentValue;
}
arr.reduce(callbackFun, 10); // 给reduce设置了第二个参数,初始值为10,则结果为20

更多例子

二维数组转为一维数组
let arr1 = [[1,2],[2,3],[3,4]];
let arr2 = arr1.reduce(function(accumulator, currentValue) {
    return accumulator.concat(currentValue)
})
console.log(arr2) // [1, 2, 2, 3, 3, 4]
统计数组中每个元素出现的次数
// 计算每个字母出现的次数
let arr = ['a', 'b', 'c', 'a', 'c', 'a', 'a', 'd'];
let countChar = arr.reduce(function(allChar, currentChar) {
    if (currentChar in allChar) {
        allChar[currentChar]++;
    }
    else {
        allChar[currentChar] = 1;
    }
    return allChar;
}, {});
console.log(countChar) // {a: 4, b: 1, c: 2, d: 1}
数组去重
let arr = [1,2,3,6,2,1,4,9,3,2,4];
let resultArr = arr.sort().reduce(function(init, current) {
    if (init.length === 0 || init[init.length-1] !== current) {
        init.push(current);
    }
    return init;
}, []);
console.log(resultArr); // [1, 2, 3, 4, 6, 9]

map

定义

map()方法返回一个新的数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。

描述

let newArr = arr.map(function callback(currentValue, index, arr) {
    // 返回新数组的元素
})

map方法会将原数组中的每个元素按照顺序执行一遍callback函数,并将返回值组合成一个新数组。

示例:
let arr = [1,2,3,4];
let newArr = arr.map((item) => item*2)
console.log(newArr) // [2, 4, 6, 8]

完。

相关文章

  • [underscore 源码学习] reduce & 真值检测函

    map - reduce JavaScript Array.prototype 提供的 map 和 reduce ...

  • 集合常见操作

    map filter reduce flatMap compactMap 使用reduce实现map和filter...

  • 第2章 关于MapReduce 学习笔记

    2.1 使用Hadoop分析数据 2.1.1 map和reduce MapReduce包含map和reduce两个...

  • 01 - 关于 MapReduce

    1. map 和 reduce MapReduce 任务过程分为两个处理阶段:map阶段和reduce阶段。每阶段...

  • 头条面试题

    1.用reduce实现map 用reduce实现map 2.Promise和setTimeout综合输出顺序问题,...

  • hive优化参数说明

    1,一个Hive查询生成多个Map Reduce Job,一个Map Reduce Job又有Map,Reduce...

  • reduce()函数

    reduce()函数接收的参数和map()类似,一个函数f,一个list,但行为和map()不同,reduce()...

  • python 中的函数式编程

    高阶函数 map/reduce python 里面内建了map()和reduce()函数:现在知道有一个集合lis...

  • reduce实现map方法

    reduce实现map方法,首先我们先来了解一下reduce和map: 1.reduce是一个累加方法,是对数组累...

  • reduce和map

    复习一下reduce和map reduce 定义 reduce()方法接受一个函数作为累加器,数组中的每个值(从左...

网友评论

      本文标题:reduce和map

      本文链接:https://www.haomeiwen.com/subject/prjivftx.html