js 对象数组 去重
Posted 灬都是个谜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 对象数组 去重相关的知识,希望对你有一定的参考价值。
去重 函数unique
function unique(arr, key) {
if (!arr) return arr
if (key === undefined) return [...new Set(arr)]
const map = {
\'string\': e => e[key],
\'function\': e => key(e),
}
const fn = map[typeof key]
const obj = arr.reduce((o,e) => (o[fn(e)]=e, o), {})
return Object.values(obj)
}
普通数组去重
unique([1, 1, 1, 14, 1, 4, 4, 1, 13])
对象数组 去重
const list = [
{ id: 0, name: \'小明\', age: 13 },
{ id: 1, name: \'小明\', age: 99 },
{ id: 2, name: \'小明\', age: 23 },
{ id: 3, name: \'小红\', age: 42 },
{ id: 4, name: \'小明\', age: 13 },
{ id: 5, name: \'小芳\', age: 35 },
{ id: 0, name: \'小明\', age: 13 },
{ id: 7, name: \'\', age: 23 },
{ id: 8, name: \'lm\', age: 22 },
{ id: 9, name: \'xh\', age: 79 }
]
unique(list, \'id\') // id 去重
unique(list, \'age\') // age 去重
unique(list, \'name\') // name 去重
unique(list, e => e.name + e.age) // name+age 去重
实现hashcode 去重
function hashcode(str) {
str = typeof str === \'object\' ? JSON.stringify(str) : str
var hash = 0, i, chr, len;
if (str.length === 0) return hash;
for (i = 0, len = str.length; i < len; i++) {
chr = str.charCodeAt(i);
hash = ((hash << 5) - hash) + chr;
hash |= 0; // Convert to 32bit integer
}
return hash;
}
unique(list, e => hashcode(e)) // hashcode 去重
以上是关于js 对象数组 去重的主要内容,如果未能解决你的问题,请参考以下文章