我有一长串对象(>10_000),其中有我想要删除的重复对象。
为了找到重复项,我必须查看两个对象属性:a, b
这里有一些通过一个属性删除对象的优雅答案:JavaScript: Remove duplicates of objects sharing same property value
例如
const uniq = _.uniq(arr, ele => ele.value});
解决方案的输出如下所示:
const arr = [{a:1, b:1}, {a:1, b:1}, {a:2, b:2}];
const removeDuplcatesByTwoKeys = (arr, ['a', 'b']) => // only elements that are duplicates for both key values;
result: const arr = [{a:2, b:2}];
我尝试过 _.uniq(arr, ele => ele.value && ele.otherValue});
但这不起作用。
另一种方法是创建由这些值作为键的现有值的映射例如
function unique(arr, keyProps) {
let map = new Map();
const kvArray = arr.map(entry => {
return keyProps.map(k => entry[k]).join('|');
})
kvArray.map(kv => {
if(map.has(kv)) {
const val = map.get(kv)
map.set(kv, val + 1)
} else {
map.set(kv, 1)
}
})
}
虽然这会告诉您重复项是什么,但是从原始数组中删除它们的最佳方法是什么?这感觉像是一个比实际需要更复杂的解决方案。
从对象数组中删除两个属性重复项的高效方法是什么?
最佳答案
您可以将 _.uniq
与两个属性一起用作 JSON 字符串。这样,每个元素都可以通过统一系统与其他元素进行比较。
例如,
const arr = [{a:1, b:1}, {a:1, b:1}, {a:2, b:2}];
const removeDuplcatesByTwoKeys = _.uniq(arr, el => JSON.stringify({a: el.a, b: el.b}));
console.log(removeDuplcatesByTwoKeys)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
关于javascript - 当通过同时查看 2 个或更多键来确定唯一性时,如何从对象数组中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51314685/