如果组合时在第二个数组中不可用,则为基础“默认”添加默认值
var arrayOne = [{id: 1, name: 'A'},{id:2, name: 'B'},{id:3, name: 'C'},{id:4, name: 'D'},{id:5, name: 'E'}];
var arrayTwo = [{id: 1, basis: 'Online'},{id:3, basis: 'Paper'},{id:4, basis: 'Referrer'}];
一个结果应该是:var combinedArray = [{id: 1, name: 'A', basis: 'Online'},{id:2, name: 'B', basis: 'Default'},{id:3, name: 'C', basis: 'Paper'},{id:4, name: 'D', basis: 'Referrer'},{id:5, name: 'E', basis: 'Default'}];
我们可以得到从第一个数组中删除名称的数组的其他结果,如下所示var combinedArray2 = [{id: 1, basis: 'Online'},{id:2, basis: 'Default'},{id:3, basis: 'Paper'},{id:4, basis: 'Referrer'},{id:5, basis: 'Default'}];
我试过var combinedArray = [];
arrayOne.forEach(objOne => {
arrayTwo.forEach(objTwo => {
if(objOne.id === ObjTwo.id){
combinedArray.push({...objOne,...objTwo});
}
});
});
是否有任何简单的方法和更快的方法来获得结果数组,而无需迭代两次以提高性能
最佳答案
另一种方法是使用 id 作为键创建基值的 Map 并在第一个数组的映射中查找这些值
const bMap = new Map(arr2.map(e => [e.id, e.basis]))
const res = arr1.map(e => ({...e, basis : bMap.get(e.id) || 'Default' }))
console.log(res)
<script>
var arr1 = [{id: 1, name: 'A'},{id:2, name: 'B'},{id:3, name: 'C'},{id:4, name: 'D'},{id:5, name: 'E'}];
var arr2 = [{id: 1, basis: 'Online'},{id:3, basis: 'Paper'},{id:4, basis: 'Referrer'}];
</script>
关于javascript - 组合对象数组的特定属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63429697/