Array 的方法 reduce 是一个有非常多用处的函数。 它一个非常具有代表性的作用是将一个数组转换成一个值。但是你可以用它来做更多的事。

1、使用"reduce"代替"map"

  1. function map(arr, exec) {
  2. return arr.reduce(function(res, item, index) {
  3. var newArr = exec(item, index);
  4. res.push(newArr);
  5. return res;
  6. }, [])
  7. }
  8. var _arr = map([10, 20, 30, 50], function(item) {
  9. return item * 2
  10. })
  11. console.log(_arr); // => [20, 40, 60, 100]

2、使用"reduce"代替"filter"

  1. function filter(arr, exec) {
  2. return arr.reduce(function(res, item, index) {
  3. if (exec(item, index)) {
  4. res.push(item)
  5. }
  6. return res;
  7. }, [])
  8. }
  9. var _arr = filter([10, 20, 30, 50], function(item) {
  10. return item < 50
  11. })
  12. console.log(_arr); // => [10,20,30]

3、应用

计算数组中元素出现的次数(将数组转为对象)

  1. var cars = ['BMW', 'Benz', 'Benz', 'Tesla', 'BMW', 'Toyota'];
  2. var carsObj = cars.reduce(function(obj, name) {
  3. obj[name] = obj[name] ? ++obj[name] : 1;
  4. return obj;
  5. }, {});
  6. console.log(carsObj); // => { BMW: 2, Benz: 2, Tesla: 1, Toyota: 1 }

去除数组对象中重复的值(根据对象的某一个key值,key重复就认为数组重复)

  1. var data = [{
  2. id: 0,
  3. name: 'jack',
  4. age: 30
  5. }, {
  6. id: 1,
  7. name: 'jackchen',
  8. age: 20
  9. }, {
  10. id: 2,
  11. name: 'eric',
  12. age: 15
  13. }, {
  14. id: 3,
  15. name: 'tomas',
  16. age: 20
  17. }, {
  18. id: 4,
  19. name: 'john',
  20. age: 20
  21. }, {
  22. id: 5,
  23. name: 'jacky',
  24. age: 20
  25. }]
  26. function unique(arr, key) {
  27. var hash = {};
  28. return arr.reduce((item, next) => {
  29. hash[next[key]] ? '' : (hash[next[key]] = true && item.push(next));
  30. return item;
  31. }, [])
  32. }
  33. var newData = unique(data, "age");
  34. console.log(newData);

非常强力的reduce的更多相关文章

  1. (转)8个有力的Awk内建变量

    8个有力的Awk内建变量 翻译原文:8 Powerful Awk Built-in Variableshttp://www.thegeekstuff.com/这个博客真是不错. 这篇文章是Awk Tu ...

  2. Linux 8个有力的Awk内建变量

    Awk 有几个非常强力的内置变量.通常来说,分为两种类型的内置变量: 第一种是定义的变量可以改变, 比如字段分隔(FS)与记录分隔(RS) 第二种是可以用来数据处理或者数据总结,比如记录数(NR)与字 ...

  3. AI PRO I 第4章

    Behavior Selection Algorithms An Overview Michael Dawe, Steve Gargolinski, Luke Dicken, Troy Humphre ...

  4. 用JSON-server模拟REST API(三) 进阶使用

    用JSON-server模拟REST API(三) 进阶使用 前面演示了如何安装并运行 json server , 和使用第三方库真实化模拟数据 , 下面将展开更多的配置项和数据操作. 目录: 配置项 ...

  5. stringstream vs sprintf, sscanf.

    前言 以前一直认为 stringstream 远不如 sprintf. 近日突然萌发了看看 stirngstream 是不是真的如我想的那么烂 对比 // stringstream. stringst ...

  6. Day 1 上午

    唉,上午就碰到一个开不了机的电脑,白白浪费了半个小时,真的难受QwQ POINT1 枚举 枚举也称作穷举,指的是从问题所有可能的解的集合中一一枚举各元素. 用题目中给定的检验条件判定哪些是无用的,哪些 ...

  7. <知识整理>2019清北学堂提高储备D1

    一.枚举: 枚举是最简单最基础的算法,核心思想是将可能的结果都列举出来并判断是否是解. 优点:思维简单,帮助理解问题.找规律.没头绪时 缺点:时空复杂度较高,会有很多冗余的非解(简单的枚举几乎没有利用 ...

  8. vue项目移植tinymce踩坑

    转载:https://segmentfault.com/a/1190000012791569?utm_source=tag-newest 2019-2-18 貌似这篇文章帮了大家一些小忙最近tinym ...

  9. [web 前端] mobx教程(一)-mobx简介

    opy from : https://blog.csdn.net/smk108/article/details/84777649 Mobx是通过函数响应式编程使状态管理变得简单和可扩展的状态管理库.M ...

随机推荐

  1. es6箭头函数的注意要点

    具有一个参数的简单函数 var single = a => a single('hello, world') // 'hello, world' 没有参数的需要用在箭头前加上小括号 var lo ...

  2. js+Canvas 利用js 实现浏览器保存图片到本地

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. call()方法和apply()方法

    最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...

  4. PHP 常用函数总结(二)

    4.PHP处理数据库的常用函数. 汇总表 PHP 5 MySQLi 函数 函数 描述 mysqli_affected_rows() 返回前一个 Mysql 操作的受影响行数. mysqli_autoc ...

  5. 【win10】浏览器Chrome 和edge 体验对比与使用心得

    (1)Google和edge都内置了PDF阅读器,不用特意安装PDF软件了.桌面上的PDF文件可以直接用这两个浏览器打开. 然后对比来看,清晰度上美观度上,Chrome要比edge好一些.因为edge ...

  6. google 浏览器插件安装

    谷歌访问助手

  7. BZOJ5298 CQOI2018交错序列(动态规划+矩阵快速幂)

    显然答案为Σkb·(n-k)a·C(n-k+1,k).并且可以发现ΣC(n-k,k)=fibn.但这实际上没有任何卵用. 纯组合看起来不太行得通,换个思路,考虑一个显然的dp,即设f[i][j][0/ ...

  8. 【BZOJ2961】共点圆(CDQ分治)

    [BZOJ2961]共点圆(CDQ分治) 题面 BZOJ 题解 设询问点\((x,y)\),圆心是\((X,Y)\) 那么如果点在园内的话就需要满足 \((X-x)^2+(Y-y)^2\le X^2+ ...

  9. 51nod 1681 公共祖先 | 树状数组

    51nod 1681 公共祖先 有一个庞大的家族,共n人.已知这n个人的祖辈关系正好形成树形结构(即父亲向儿子连边). 在另一个未知的平行宇宙,这n人的祖辈关系仍然是树形结构,但他们相互之间的关系却完 ...

  10. 【Cf #290 C】Fox And Dinner(最大流)

    如果要相邻两个数(a[i] >= 2)相加为质数,显然它们的奇偶性不同,也就是说一个圆桌(环)必须是偶环. 也就是答案的若干个环组成了一张二分图,其中以奇偶分色. 考虑每个点的度数一定为2,用最 ...