之前写过一篇有关数组去重的博客,是针对数组项去重,今天来整理一篇有关数组对象的某个属性相同而去重的方法
需求
一个数组中的每一项都是对象,现在需要将这个对象中name相同的只保留一个,即根据对象的name去重,通过以下方法可实现
解决方法
【1】数组方法reduce()介绍
reduce()方法从左到右依次处理数组的每个成员,最终累计为一个值。
1、格式:
array.reduce(function(total, currentValue, index, arr){
// total: 累积变量,默认为数组的第一个成员
// currentValue: 当前变量,默认为数组的第二个成员
// index: 当前位置(从0开始)
// arr: 原数组
}, 默认值初始值)
2、案例
[1, 2, 3, 4, 5].reduce(function (a, b) {
return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后结果:15
【2】解决思路和方法
通过数组的reduce()方法对数组的对象从左到右进行处理,定义一个空对象obj{},如果数组当前对象的name不在obj{}里头,就将当前对象的name加入到空对象,并将当前对象push到积累变量total数组里,如果当前对象的name存在obj{},则跳过push操作
var person = [
{
id: 1,
name: "赵一"
},
{
id: 2,
name: "陈二"
},
{
id: 3,
name: "张三"
},
{
id: 4,
name: "李四"
},
{
id: 5,
name: "王五"
},
{
id: 6,
name: "张三"
},
{
id: 7,
name: "王五"
},
];
var obj = {};
person = person.reduce((current, next) => {
obj[next.name] ? "" : obj[next.name] = true && current.push(next);
return current;
}, []) //设置current默认类型为数组,并且初始值为空的数组
console.log(person) // person数组只剩下五项,name重复的张三和王五已去除