JavaScript中如何获取两个对象数组的差异元素value值集合
最优实现方案
我们的核心需求是筛选出origArr中存在、但newArr中不存在的元素对应的value值,优先选择时间复杂度更低的实现方案:
高性能推荐方案(时间复杂度O(n+m))
利用Set的O(1)查找特性,避免嵌套遍历带来的性能损耗,适合数组长度较大的场景:
let origArr = [ { value: 2, label: 'Dog' }, { value: 4, label: 'Cat' }, { value: 16, label: 'Horse' } ] let newArr = [ { value: 2, label: 'Dog' }, { value: 3, label: 'Bird' }, { value: 0, label: 'Fish' } ] // 先提取newArr所有value存入Set const newValSet = new Set(newArr.map(item => item.value)) // 遍历origArr筛选差异值 const diffArr = origArr.filter(item => !newValSet.has(item.value)).map(item => item.value) console.log(diffArr) // 输出 [4, 16]
ES2016 对应实现方案
ES2016 新增了Array.prototype.includes方法,可直接用该方法实现,写法更简洁,适合数组长度较小的场景:
const newVals = newArr.map(item => item.value) const diffArr = origArr.filter(item => !newVals.includes(item.value)).map(item => item.value)
两种方案都符合需求,且因为题目明确两个数组的value属性值均唯一,不需要额外做去重处理。
内容的提问来源于stack exchange,提问作者ArthurJ
相关产品推荐
相关产品推荐

