4Manuals

  • PDF Cloud HOME

我想根据其ID对两个数组的对象进行联合 Download

    CSS / JS-如何覆盖一个孩子而不是其他孩子的父母过渡 反应:更改方向后触发重新渲染和offsetWidth的重新计算 我的Javascript从'string'转换为'integer'或'number'无效 如何删除外部索引并合并内部json 在React Native 图片无法通过javascript刷新 如何在react图表上的datakey中操作DateTime 如何在Swift中将数组的每个元素与下一个数组的每个元素相乘? 字符串数组在for循环中初始化时忽略索引0 在Cypress中保存变量

假设我有两个数组

let array1 = [{id: 1,name: "a"},{id: 2,name: "b"}]
let array2 = [{id: 1,name: 'c'},{id: 3,name: 'd'}]

我希望得到的数组像这样

let result = [{id: 1,name: 'c'},{id: 2,name: 'b'},{id: 3,name: 'd'}]

因此,如果第二个数组有一个对象,而第一个数组也有一个具有相同ID的对象,则将第一个对象替换为第二个数组对象。 目前,我尝试使用以下代码,但是它会检查每个值是否匹配,并且我只想基于id进行匹配

const uniqueArray = this.servicesdata.filter((item, index) => {
        const _item = JSON.stringify(item);
        return (
          index ===
          this.servicesdata.findIndex(obj => {
            return JSON.stringify(obj) === _item;
          })
        );
      });
      console.log(uniqueArray);

2 个答案:

答案 0 :(得分:0)

这是一种O(NlogN)的方法。

let array1 = [{id: 1,name: "a"},{id: 2,name: "b"}] // Let's say its size is N1
let array2 = [{id: 1,name: 'c'},{id: 3,name: 'd'}] // Let's say its size is N2
let duplicate  = new Set() // A set to check for duplicate elements
let result = array2
array2.forEach((item)=>{ // O(N2logN2)
    duplicate.add(item.id);
})
array1.forEach((item)=>{ // O(N1logN2)
    // If `duplicate` does NOT have `item.id`, that means it's unique in array1, so add it to result
    // Otherwise, skip it because for duplicates, we want value from array2
    if(!duplicate.has(item.id))
        result.push(item);
})
// Overall complexity of approach - O(N2logN2) + O(N1logN2) ==> O(NlogN)
console.log(result);

输出:

[ { id: 1, name: 'c' },
  { id: 3, name: 'd' },
  { id: 2, name: 'b' } ]

答案 1 :(得分:0)

使用lodash,您可以使用unionBy:

let array1 = [{id: 1,name: "a"},{id: 2,name: "b"}]
let array2 = [{id: 1,name: 'c'},{id: 3,name: 'd'}]
console.log(_.unionBy(array2, array1, 'id'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>



Similar searches
    获取Pytest,相对导入和Patch.Object进行协作 如何在Azure DevTest实验室中启用更新管理 将函数参数传递给另一个函数pandas python 为什么Docker容器会自行退出 H2数据库两个派生表的内部联接需要47秒