JS 数组中对象去重 reduce 用法
[3,2,6].reduce.((aa, bb) => {return aa+bb}, []) // 注意传了2个参数,第一个为回调,第二个为初始值 aa
单纯数组去重:
let arr = new Set([1,1,3,3,'bb','bb','cc'])
[...arr] // 打印出 1, 3, "bb", "cc"
对于数组对象,传统的去重方法无能为力,至于forEach()、filter()等迭代方法也不好使;真正能做到优雅去重的,是ES5新增加的一个方法——reduce()
高手给的,完美方法
let log = console.log.bind(console);
let person = [
{id: , name: "小明"},
{id: , name: "小张"},
{id: , name: "小李"},
{id: , name: "小孙"},
{id: , name: "小周"},
{id: , name: "小陈"},
]; let obj = {}; person = person.reduce((cur,next) => {
obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
return cur;
},[]) //设置cur默认类型为数组,并且初始值为空的数组
log(person);
高手总结:https://www.cnblogs.com/caideyipi/p/7679681.html
使用时发现开 eslint 时,上面的表达式会报错,换成以下条件即可:
let obj = {};
person = person.reduce((cur,next) => {
if (!obj[next.id]) {
obj[next.id] = true
if (!obj[next.id]) {
cur.push(next)
}
} // 不会报错,也比较好懂了 (当对象里没有所传属性时,给属性true并PUSH数组)
return cur;
},[])
.
JS 数组中对象去重 reduce 用法的更多相关文章
- js数组中对象去重 (reduce() 方法)
一个数组中含有对象,并且去掉数组中重复的对象.主要代码如下: var arrData = [ {id: , name: "小明"}, {id: , name: "小张&q ...
- reduce方法简单实现数组中对象去重
js数组的reduce方法,接收一个函数(必须)和指定的初始值(非必须)作为参数,函数有三个参数,分别为初始值,当前项,当前数组,进行累加或者累积操作,初始值为每次累加或者累计后的结果 注意:在ie9 ...
- Js数组内对象去重
let person = [ {id: 0, name: "小明"}, {id: 1, name: "小张"}, {id: 2, name: "小李& ...
- js sort方法根据数组中对象的某一个属性值进行排序(实用方法)
js sort方法根据数组中对象的某一个属性值进行排序 sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [ {nam ...
- JS数组操作:去重,交集,并集,差集
原文:JS数组操作:去重,交集,并集,差集 1. 数组去重 方法一: function unique(arr) { //定义常量 res,值为一个Map对象实例 const res = new Map ...
- Vue 改变数组中对象的属性不重新渲染View的解决方案
Vue 改变数组中对象的属性不重新渲染View的解决方案 在解决问题之前,我们先来了解下 vue响应性原理: Vue最显著的一个功能是响应系统-- 模型只是一个普通对象,修改对象则会更新视图.受到ja ...
- js 数组、对象转json 以及 json转 数组、对象
let jsonObj = $.parseJSON(jsonStr); //json字符串转化成json对象(jq方法) var jsonObj = JSON.parse(jsonStr); //js ...
- 仵航说 Vue用replace修改数组中对象的键值或者字段名 仵老大
仵航说 Vue用replace修改数组中对象的键值或者字段名 仵老大 1.介绍 先看图 今天在项目中遇到了一个问题,例如我现在需要传一些数据到后端,数组例如是 let arr = [ {" ...
- 统计js数组中奇数元素的个数
如何统计一个JS数组中奇数元素的个数呢? 这是群友提出的一个问题,大部分群友给出的是遍历 然后对2取模,得到最终结果. 这样的写法是最容易想得到的,那么有没有其他思路呢? 这里我提供另外一种思路,我们 ...
随机推荐
- Leetcode 349. 两个数组的交集 By Python
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5], ...
- 刚需,jackjsonjson转化内部类问题
1.今天在编写jackjson将json转换成object的时候,突然报错: nested exception is com.fasterxml.jackson.databind.JsonMappin ...
- django模板中使用JQ代码实现瀑布流显示效果
settings中的配置不再详细说明 一.路由代码 from django.contrib import admin from django.conf.urls import url from app ...
- linux:提取匹配含有小数点的数字(grep函数)
学艺不精,一开始用了 “grep -ne '46.5743' file.txt” 提取含有46.5743的小数不成功,后面查资料才知道正则表达式中,小数点代表的是:一定有一个任意字节. 正确的写法应该 ...
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
在上一篇博客中,实现了Java中二叉树的四种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序.中序.后序.层序遍历,在非递归实现中,借助了栈来帮助实现遍历.前序和中序比较类似, ...
- arm-fsl-linux-gnueabi交叉编译器安装
系统:Ubuntu 14.04 64bit 编译器gcc version 4.4.4 (4.4.4_09.06.2010) 解压编译器到相应路径(注:当我解压放到/home/cross_compile ...
- SCU-4437 Carries
https://blog.csdn.net/catglory/article/details/46539283 https://blog.csdn.net/u012127882/article/det ...
- node.js(基础四)_express基础
一.前言 本次内容主要包括: 1.express的基本用法 2.express中的静 ...
- Modbus
Modbus 串行链路协议是一个主-从协议.在同一时刻,只有一个主节点连接于总线,一个或多个子节点 (最大编号为 247 ) 连接于同一个串行总线. Modbus 通信总是由主节点发起.子节点在没有收 ...
- aspcms逻辑错误导致后台地址泄露
访问即可跳转后台地址: URL:http://www.xxx.org.cn/plug/oem/AspCms_OEMFun.asp 注入:plug/comment/commentList.asp?id= ...