首页 > 解决方案 > 我有两个数组,两个数组都有数据,但都有 field_id 所以我想要合并数组

问题描述

我有两个数组,我想合并两个数组,但数组 1 与 2 合并并创建新数组在新数组中也有 array1 和 array2 数据,但不重复条目。

我尝试使用 concat 函数,但它没有用

阵列 1:

[[id: 45,
    name: Tv,
    active: false,
], [id: 56,
    name: Car,
    active: true,
][id: 60,
    name: bus,
    active: false,
]]

阵列 2:

[[id: 45,
        company: sony,
        size: 32,
        price: 451
    ],
    [id: 56,
        company: suzuki,
        size: L,
        price: 3000
    ]]

我想要这样的数据:

[[id: 45,
        name: tv,
        active: false,
        company: sony,
        size: 32,
        price: 451
    ],
    [id: 56,
        name: car,
        active: true,
        company: suzuki,
        size: M,
        price: 3000
    ],
    id: 60,
    name: bus,
    active: false]]

但是如果您使用此数据在 javascript 中的对象中创建对象

标签: javascripttypescript

解决方案


您可以使用以下方法来合并任意数量的数组:

  • 将所有项目合并到一个数组中
  • 获取一组唯一 ID
  • 合并所有具有相同 id 的对象

const arr1 = [{ id: 45, name: "Tv", active: false }, { id: 56, name: "Car", active: true }, {id: 60, name: "bus", active: false }];
const arr2 = [{ id: 45, company: "sony", size: 32, price: 451 }, { id: 56, company: "suzuki", size: "L", price:3000 }];
const arr3 = [{ id: 45, type: 'electronics' }];

const mergeArrays = (...arrays) => {
  const all = [].concat.apply([], arrays);
  const ids = new Set(all.map(item => item.id));
  return Array.from(ids).map(id =>
    Object.assign({}, ...all.filter(item => item.id === id))
  );
};

console.log(mergeArrays(arr1, arr2, arr3));


推荐阅读