JavaScript数组对象去重

这种数组如何去重

let arr = [{ name: 'li', age: 12 }, { name: 'li' age: 12 }]

除了这种方法还有啥更高效的方法去除数组里面对象重复的元素

unique (array) {
      var res = []
      for (var i = 0, arrayLen = array.length; i < arrayLen; i++) {
        for (var j = 0, resLen = res.length; j < resLen; j++) {
          if (array[i].name === res[j].name) {
            break
          }
        }
        if (j === resLen) {
          res.push(array[i])
        }
      }
      return res
    }
阅读 4.6k
6 个回答

不考虑兼容性的话可以用ES6的语法特性 Array.from(new Set(arr.map(v => JSON.stringify(v)))).map(v=>JSON.parse(v))

let arr = [{ name: 'li', age: 12 }, { name: 'li', age: 12 }]
function unique(list) {
  return list.reduce((tmp, item) => {
    var str = JSON.stringify(item)
    if (tmp.findIndex((ele) => {
      return JSON.stringify(ele) === str
    }) === -1) {
      tmp.push(item)
    }
    return tmp
  }, [])
}
console.log(unique(arr))
function unique() {
            var res = [];
            for (var i = 0; i < arr.length; i++) {
                var len = arr.length;
                while(len > i) {
                    if (arr[i].name == arr[len].name) {
                        res.push(arr[len]);
                    }
                    len--;
                }
            }
            return res;
        }
let arr = [{ name: 'li', age: 12 }, { name: 'li', age: 12 }],
    result = {},
    newArr = [];
    
arr.map((item,index)=>{
    result[arr[index].name] = arr[index];
})

for(item in result){
    newArr.push(result[item]);
}

console.log(newArr) //[{ name: 'li',age: 12 }]

谢邀,一个比采纳稍快一点的方法

Array.from(
    arr
    .reduce((m, x) => m.set(JSON.stringify(x), x), new Map())
    .values()
)

当然,前提是数据符合 JSON 格式。

请百度lodash

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题