JS数组对象去重
参考 数组对象去重
数据如下:
[{ name: 'zs', age: 15 }, { name: 'lisi' }, { name: 'zs' }]
想要将 name 为 zs 的数据去重,优先保留第一条相同数据
解决方法
reduce 去重
let hash = {}
function unique(arr, initialValue) {
return arr.reduce(function (previousValue, currentValue, index, array) {
hash[currentValue.name] ? '' : (hash[currentValue.name] = true && previousValue.push(currentValue))
return previousValue
}, initialValue)
}
const uniqueArr = unique([{ name: 'zs', age: 15 }, { name: 'lisi' }, { name: 'zs' }], [])
console.log(uniqueArr) // uniqueArr.length == 2
lodash 工具库去重
_.uniqBy([{ x: 1 }, { x: 2 }, { x: 1 }], 'x')
// => [{ 'x': 1 }, { 'x': 2 }]
// 指定条件
_.uniqBy([2.1, 1.2, 2.3], Math.floor)
// => [2.1, 1.2]
想要所有对象属性都一样才去重也简单
var objects = [
{ x: 1, y: 2 },
{ x: 2, y: 1 },
{ x: 1, y: 2 },
]
_.uniqWith(objects, _.isEqual)
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]