无法在javascript中将第二个数组对象值添加到对象的第一个数组中



hi我有两个数组,我想合并两个数组。请任何一个帮助我,我已经用于循环推送这些值,但它会创建重复。

const firstArray = [
{
first: "01",
data: [{ id: "012345" }, { id: "0123456" }, { id: "0123457" }]
},
{
first: "02",
data: [{ id: "9998989" }, { id: "1223" }, { id: "345666" }]
},
{
first: "03",
data: [{ id: "567888" }, { id: "2345" }, { id: "09876" }]
}
];
const secondArray = [{ data: "abc" }, { data: "efg" }, { data: "hij" }];

我需要这样的结果,任何一个都可以,

[
{
first: "01",
data: [
{ id: "012345", data: "abc" },
{ id: "0123456", data: "efg" },
{ id: "0123457", data: "hij" },
],
},
{
first: "02",
data: [
{ id: "9998989", data: "abc" },
{ id: "1223", data: "efg" },
{ id: "345666", data: "hij" },
],
},
{
first: "03",
data: [
{ id: "567888", data: "abc" },
{ id: "2345", data: "efg" },
{ id: "09876", data: "hij" },
],
},
];

您可以使用两个.map()方法,而不是使用嵌套的for循环从头开始构建数组。一个用于将firstArray中的外部对象映射到具有新data值的新对象,另一个用于从secondArray中的数据将data映射到合并版本。要合并,可以使用索引从secondArray中获取相应的对象,然后使用排列语法将两个对象合并在一起:

const firstArray = [ { first: "01", data: [{ id: "012345" }, { id: "0123456" }, { id: "0123457" }] }, { first: "02", data: [{ id: "9998989" }, { id: "1223" }, { id: "345666" }] }, { first: "03", data: [{ id: "567888" }, { id: "2345" }, { id: "09876" }] } ];
const secondArray = [{ data: "abc" }, { data: "efg" }, { data: "hij"}];
const res = firstArray.map(obj => ({
...obj,
data: obj.data.map((inner, i) => ({...inner, ...secondArray[i]}))
}));
console.log(res);

要修复当前的实现,您可以创建两个数组,一个在for循环之外,就像您目前已经在做的那样,另一个在第一个for循环内部。内部数组将代表您的新数据数组,然后您可以为当前对象更新该数组:

const firstArray = [{ first: "01", data: [{ id: "012345" }, { id: "0123456" }, { id: "0123457" }] }, { first: "02", data: [{ id: "9998989" }, { id: "1223" }, { id: "345666" }] }, { first: "03", data: [{ id: "567888" }, { id: "2345" }, { id: "09876" }] } ]; const secondArray = [{ data: "abc" }, { data: "123" }, { data: "xyz" }];
const emptyArray = [];
for (let i = 0; i < firstArray.length; i++) {
const data = firstArray[i].data;
const dataArray = [];
for (let j = 0; j < data.length; j++) {
const newObject = {
...data[j],
...secondArray[j]
};
dataArray.push(newObject);
}
emptyArray.push({...firstArray[i], data: dataArray});
}
console.log(emptyArray);

假设data数组和第二个数组大小相同。使用嵌套的map方法调用来构建聚合

const firstArray = [
{
first: "01",
data: [{ id: "012345" }, { id: "0123456" }, { id: "0123457" }],
},
{
first: "02",
data: [{ id: "9998989" }, { id: "1223" }, { id: "345666" }],
},
{
first: "03",
data: [{ id: "567888" }, { id: "2345" }, { id: "09876" }],
},
];
const secondArray = [{ data: "abc" }, { data: "efg" }, { data: "hij" }];
const output = firstArray.map(({ first, data }) => ({
first,
data: data.map((item, i) => ({ ...item, ...secondArray[i] })),
}));
console.log(output)

使用js 中的map可以轻松实现结果

const firstArray = [
{
first: "01",
data: [{ id: "012345" }, { id: "0123456" }, { id: "0123457" }],
},
{
first: "02",
data: [{ id: "9998989" }, { id: "1223" }, { id: "345666" }],
},
{
first: "03",
data: [{ id: "567888" }, { id: "2345" }, { id: "09876" }],
},
];
const secondArray = [{ data: "abc" }, { data: "efg" }, { data: "hij" }];
const result = firstArray.map((obj) => ({
...obj,
data: obj.data.map((o, i) => ({ ...o, ...secondArray[i] })),
}));
console.log(result);

根据您想要的结果,您应该执行以下操作:

let emptyArrray = [];
for (let i = 0; i < firstArray.length; i++) {
const dataa = firstArray[i].data;
for (let j = 0; j < dataa.length; j++) {

// console.log(secondArray[i]);
let newObject = {
...secondArray[j],
...dataa[j]
};
emptyArrray.push(newObject);

}
} 

在你的代码中,你得到了3*9长的数组,因为你在不应该使用的地方使用了嵌套循环,你只需要在数组上运行一次,然后从数组二添加成员,你也用过

...secondArray[i],
...dataa[i]

而不是

...secondArray[j],
...dataa[j]

在for循环中递增j