两种简洁的数组对象去重姿势
偶然间需要写数组对象去重的处理,这两种都是几行代码搞定
// 需要去重的data数据
let person = [
{ id: 0, name: "小明" },
{ id: 0, name: "小明" },
{ id: 0, name: "小明" },
{ id: 0, name: "小明" },
{ id: 1, name: "小张" },
{ id: 2, name: "小李" },
{ id: 3, name: "小孙" },
{ id: 3, name: "小孙" },
{ id: 1, name: "小周" },
{ id: 2, name: "小陈" },
];
第一种 可统计重复出现次数
let arr = [];
let obj = {};
person.map(item => {
obj[item.id] ? obj[item.id]++ : obj[item.id] = 1 && arr.push(item);
})
第二种 不需要统计次数的
let obj1 = {};
let data = person.reduce((first, item) => {
obj1[item.id] ? "" : obj1[item.id] = true && first.push(item);
return first;
}, [])
补充一下 Array.reduce 方法的说明
Array.reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值
Array.reduce() 可以作为一个高阶函数,用于函数的 compose
语法 array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
参数解析
total => 循环数组第一次出现 == arr[0] 循环第二个值开始为 undefined
currentValue => 数组循环第二次开始 == arr[0+1] 循环第一次的值为空从数组第二个开始直至结束
currentIndex => 循环下标索引值
initialValue => 如果传一个数组的话 total循环的第一个值为传入的数组或者传入的值