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

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

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

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

function filter(arr, exec) {
return arr.reduce(function(res, item, index) {
if (exec(item, index)) {
res.push(item)
}
return res;
}, []) }
var _arr = filter([10, 20, 30, 50], function(item) {
return item < 50
})
console.log(_arr); // => [10,20,30]

3、应用

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

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

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

var data = [{
id: 0,
name: 'jack',
age: 30
}, {
id: 1,
name: 'jackchen',
age: 20
}, {
id: 2,
name: 'eric',
age: 15
}, {
id: 3,
name: 'tomas',
age: 20
}, {
id: 4,
name: 'john',
age: 20
}, {
id: 5,
name: 'jacky',
age: 20
}] function unique(arr, key) {
var hash = {};
return arr.reduce((item, next) => {
hash[next[key]] ? '' : (hash[next[key]] = true && item.push(next));
return item;
}, [])
}
var newData = unique(data, "age");
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. Alpha版本冲刺(七)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  2. lintcode-513-完美平方

    513-完美平方 给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, ... )使得他们的和等于 n.你需要让平方数的个数最少. 样例 给出 n = 12, 返回 3 因为 12 = 4 ...

  3. bash简介1

    bash脚本语言文件格式 第一行#!/bin/bash :定义bash脚本解释器 注释信息:# 代码注释: 缩进,适度添加空白行 bash中的变量介绍: 局部变量  本地变量   环境变量  位置参数 ...

  4. 解决nginx+uWSGI部署Django时遇到的static文件404的问题

    昨天是利用Django自带的runserver部署的服务器,但是由于runserver比较不稳定,因此决定采用uWSGI+nginx进行部署. 昨天已经安装好了uwsgi和nginx,使用该指令打开8 ...

  5. 【第十周】final预发布视频

    final版本发布视频组名: 新蜂组长: 武志远组员: 宫成荣 谢孝淼 杨柳 李峤项目名称:java俄罗斯方块NEO平台:优酷地址:http://v.youku.com/v_show/id_XMTg0 ...

  6. PAT 1072 开学寄语

    https://pintia.cn/problem-sets/994805260223102976/problems/994805263964422144 1072 开学寄语(20 分)提问 下图是上 ...

  7. python查询mysql以字典返回

    # *_*coding:utf-8 *_* import pymysql conn = pymysql.connect(host='192.168.33.10', user='root', passw ...

  8. 相见恨晚的 scala - 01 [ 基础 ]

    简洁到不行,多一个分号都是不应该. 学习笔记: centOS 下安装 scala 和安装 jdk 一毛一样 . 1 . 不同于 Java 的变量声明 :( 但是和 js 很像 ) /** * Crea ...

  9. 第214天:Angular 基础概念

    一.Angular 简介 1. 什么是 AngularJS - 一款非常优秀的前端高级 JS 框架 - 最早由 Misko Hevery 等人创建 - 2009 年被 Google 公式收购,用于其多 ...

  10. UVALive6443_Alien Abduction Again

    题意为给你若干个三次函数,以及每一个函数所分布的区间,由于每个函数的所有的系数都是整数,所以最后的函数在整数点处的值也是整数. 现在每次可以插入函数或者询问区间,现在要求每次询问区间后,所有的函数在这 ...