欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

多种实现JavaScript数组去重的方法(包括对象数组)

最编程 2024-02-02 07:54:23
...

一、普通数组去重

1.最方便的方法(利用ES6 的Set)

function unique (arr) {
  return [...new Set(arr)]
}

2.利用filter

function unique(arr) {
  return arr.filter(function(item, index, arr) {
    //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
    return arr.indexOf(item, 0) === index;
  });
}

3.利用Map数据结构去重

function unique(arr) {
  let map = new Map();
  let array = new Array();  // 数组用于返回结果
  for (let i = 0; i < arr.length; i++) {
    if(map.has(arr[i])) {  // 如果有该key值
      map.set(arr[i], true); 
    } else { 
      map.set(arr[i], false);   // 如果没有该key值
      array.push(arr[i]);
    }
  }
  return array ;
}

二、对象数组去重(升级版)

  • 输入
[{a:1,b:2,c:3},{b:2,c:3,a:1},{d:2,c:2}]
  • 输出
[{a:1,b:2,c:3},{d:2,c:2}]
  • 首先写一个函数把对象中的key排序,然后再转成字符串
function objSort(obj){
    let newObj = {}
    //遍历对象,并将key进行排序
    Object.keys(obj).sort().map(key => {
        newObj[key] = obj[key]
    })
    //将排序好的数组转成字符串
    return JSON.stringify(newObj)
}
  • 遍历数组利用Set将转为字符串后的对象去重
function unique(arr){
    let set = new Set();
    for(let i=0;i<arr.length;i++){
        let str = objSort(arr[i])
        set.add(str)
    }
    //将数组中的字符串转回对象
    arr = [...set].map(item => {
        return JSON.parse(item)
    })
    return arr
}

更多

  • Web开发知识点总结

参考文章

JavaScript数组去重(12种方法,史上最全)