将第二个嵌套对象数组复制到第一个嵌套对象数组中

时间:2021-03-31 13:45:24

标签: javascript arrays deep-copy arrayobject

如何将对象数组中的键值分配给另一个数组对象

我想将 /tmp 对分配给另一个对象数组中的现有对象数组。

我已经检查了这个 thread,但它在我的情况下不起作用。

我已经尝试过类似的操作,但没有返回我正在寻找的所需输出。

key:value

我需要的结果如下:

const DataA = {
  "id": 57,
  "status": true,
  "options": [{ "id": 1, "name": "Type A" },
    { "id": 2, "name": "Type B" },
    { "id": 3, "name": "Type C" }]
}

const DataB = {
  "id": 57,
  "status": true,
  "options": [{ "id": 1, "value": 10 },
    { "id": 2, "value": 20 },
    { "id": 3, "value": 30 }]
}

let result;
var A1 = DataA.options.map((v) => {
  console.log(v);
  result = v;
})

var A2 = DataB.options.map(v => {
  result.options = v;
  console.log("result",result);
})

let arr3 = DataA.options.map((item, i) => Object.assign({}, item, DataB[i]));

console.log(arr3);

我需要合并与这个thread略有不同的数组的深层克隆。

1 个答案:

答案 0 :(得分:1)

链接的副本确实解决了您的问题,但您需要根据自己的情况进行调整,而不仅仅是复制粘贴。

DataA.options = DataA.options.map((item, i) => Object.assign({}, item, DataB.options[i]));

但是由于这无论如何都会改变原始的 DataA 对象,您最好只使用 forEach() 并避免从 .map() 创建中间数组。

DataA.options.forEach((item, i) => Object.assign(item, DataB.options[i]));

以上都假设两个对象的options数组都是a。长度相同,并且 b.按 ID 排序。为了避免这些假设,您可以使用 .find() 来查找匹配的元素,而不是依赖索引。

DataA.options.forEach(item =>
  Object.assign(item, DataB.options.find(({ id }) => id === item.id)));

const DataA = {
  "id": 57,
  "status": true,
  "options": [
    { "id": 1, "name": "Type A" },
    { "id": 2, "name": "Type B" },
    { "id": 3, "name": "Type C" }]
}

const DataB = {
  "id": 57,
  "status": true,
  "options": [
    { "id": 1, "value": 10 },
    { "id": 2, "value": 20 },
    { "id": 3, "value": 30 }]
}

DataA.options.forEach(item =>
  Object.assign(item, DataB.options.find(({ id }) => id === item.id)));

console.log(DataA)
.as-console-wrapper { max-height: 100% !important; top: 0; }