乐趣区

关于javascript:js数组对象去重

明天给大家介绍三种数组对象去重的办法,简略不便
有这么一组数组对象

let arr = [{
        id: '1',
        key: '1',
        value: '明月'
      }, {
        id: '3',
        key: '2',
        value: '可欣'
      }, {
        id: '2',
        key: '3',
        value: '小红'
      }, {
        id: '1',
        key: '1',
        value: '小馨'
      }, {
        id: '1',
        key: '2',
        value: '小静'
      }]

1、对象拜访属性的办法

let newArr = [];
    let obj = {};
    for (var i = 0; i < arr.length; i++) {if (!obj[arr[i].key]) {newArr.push(arr[i])
         obj[arr[i].key] = true
       }
    }
console.log(newArr);

2、Map()办法

set 办法设置 key 所对应的键值,而后返回整个 Map 构造。如果 key 曾经有值,则键值会被更新,否则就新生成该键。
values 办法能够返回 Map 对象值的遍历器对象

let map = new Map();
for (let item of this.arr) {map.set(item.id, item);
 }
 this.arr = [...map.values()];
 console.log(this.arr)

3、reduce() 办法

reduce() 办法接管一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

参数 形容
total 必须。初始值, 或者计算完结后的返回值。
currentValue 必须。以后元素
currentIndex 可选。以后元素的索引
arr 可选。以后元素所属的数组对象。
initialValue 可选。传递给函数的初始值
const obj = {}
arr = arr.reduce((total, next) => {obj[next.key] ? '' : obj[next.key] = true && total.push(next)
  return total
}, [])
console.log(arr)

这里还有一个需要,如果有两个或者多个判断条件,给数组对象去重,加一个判断条件就行了

const hasObj = {}
arr = arr.reduce((total, next) => {
   const filterKey = next.key + next.id;
   hasObj[filterKey] ? "" : hasObj[filterKey] = true && total.push(next)
   return total
}, [])
console.log(arr)

心愿能够帮忙到你!

退出移动版