如何在不合并对象属性的情况下推送对象数组以创建新数组?
How to push arrays of objects to create new array without merging object properties?
我正在尝试将循环输出保存到一个数组中。
如果我 console.log(arr2) 我得到了我想要的结果,但在多个数组中。我想要所有这些都在一个阵列中。
当我尝试使用 .push 时,所有数组的结果都相同。
也许我可以用其他方式做到这一点,但我不知道该怎么做。
let b = {};
let arr3 = [];
let arr1 = [{value1: 123, value2: 34, value3: 90, value4: 23, value5: 32},{value1: 10, value2: 09, value3: 54, value4: 32, value5: 311}];
for (let a = 0; a <=4; a++){
b = {"value1": a*a, "value3": a+12, "value4": a/2};
arr2 = arr1.map(function(record){
record.value1 = b.value1;
record.value3 = b.value3;
record.value4 = b.value4;
return record;
})
// console.log(arr2);
arr3.push(arr2);
}
console.log(arr3);
这是我用 .push 完成的,这不是我想要的。
[
{ value1: 0, value2: 34, value3: 12, value4: 0, value5: 32 },
{ value1: 0, value2: 9, value3: 12, value4: 0, value5: 311 }
]
[
{ value1: 1, value2: 34, value3: 13, value4: 0.5, value5: 32 },
{ value1: 1, value2: 9, value3: 13, value4: 0.5, value5: 311 }
]
[
{ value1: 4, value2: 34, value3: 14, value4: 1, value5: 32 },
{ value1: 4, value2: 9, value3: 14, value4: 1, value5: 311 }
]
[
{ value1: 9, value2: 34, value3: 15, value4: 1.5, value5: 32 },
{ value1: 9, value2: 9, value3: 15, value4: 1.5, value5: 311 }
]
[
{ value1: 16, value2: 34, value3: 16, value4: 2, value5: 32 },
{ value1: 16, value2: 9, value3: 16, value4: 2, value5: 311 }
]
当我在 for 循环中 console.log(arr2) 时,我几乎得到了我想要的结果,但不是在一个数组中。
[
{ value1: 0, value2: 34, value3: 12, value4: 0, value5: 32 },
{ value1: 0, value2: 9, value3: 12, value4: 0, value5: 311 }
]
[
{ value1: 1, value2: 34, value3: 13, value4: 0.5, value5: 32 },
{ value1: 1, value2: 9, value3: 13, value4: 0.5, value5: 311 }
]
[
{ value1: 4, value2: 34, value3: 14, value4: 1, value5: 32 },
{ value1: 4, value2: 9, value3: 14, value4: 1, value5: 311 }
]
[
{ value1: 9, value2: 34, value3: 15, value4: 1.5, value5: 32 },
{ value1: 9, value2: 9, value3: 15, value4: 1.5, value5: 311 }
]
[
{ value1: 16, value2: 34, value3: 16, value4: 2, value5: 32 },
{ value1: 16, value2: 9, value3: 16, value4: 2, value5: 311 }
]
预期结果:
[
{ value1: 0, value2: 34, value3: 12, value4: 0, value5: 32 },
{ value1: 0, value2: 9, value3: 12, value4: 0, value5: 311 },
{ value1: 1, value2: 34, value3: 13, value4: 0.5, value5: 32 },
{ value1: 1, value2: 9, value3: 13, value4: 0.5, value5: 311 },
{ value1: 4, value2: 34, value3: 14, value4: 1, value5: 32 },
{ value1: 4, value2: 9, value3: 14, value4: 1, value5: 311 },
{ value1: 9, value2: 34, value3: 15, value4: 1.5, value5: 32 },
{ value1: 9, value2: 9, value3: 15, value4: 1.5, value5: 311 },
{ value1: 16, value2: 34, value3: 16, value4: 2, value5: 32 },
{ value1: 16, value2: 9, value3: 16, value4: 2, value5: 311 }
]
这是因为对象是通过引用工作的。这应该工作:
替换为:
arr2 = arr1.map(function(record){
record.value1 = b.value1;
record.value3 = b.value3;
record.value4 = b.value4;
return record;
})
在你的代码中这样写:
arr2 = arr1.map(function(record) {
const tempRecord = {...record}
tempRecord.value1 = b.value1;
tempRecord.value3 = b.value3;
tempRecord.value4 = b.value4;
return tempRecord;
})
您可以通过这样做来完成最终结果:
arr3.flat();
我正在尝试将循环输出保存到一个数组中。 如果我 console.log(arr2) 我得到了我想要的结果,但在多个数组中。我想要所有这些都在一个阵列中。 当我尝试使用 .push 时,所有数组的结果都相同。
也许我可以用其他方式做到这一点,但我不知道该怎么做。
let b = {};
let arr3 = [];
let arr1 = [{value1: 123, value2: 34, value3: 90, value4: 23, value5: 32},{value1: 10, value2: 09, value3: 54, value4: 32, value5: 311}];
for (let a = 0; a <=4; a++){
b = {"value1": a*a, "value3": a+12, "value4": a/2};
arr2 = arr1.map(function(record){
record.value1 = b.value1;
record.value3 = b.value3;
record.value4 = b.value4;
return record;
})
// console.log(arr2);
arr3.push(arr2);
}
console.log(arr3);
这是我用 .push 完成的,这不是我想要的。
[
{ value1: 0, value2: 34, value3: 12, value4: 0, value5: 32 },
{ value1: 0, value2: 9, value3: 12, value4: 0, value5: 311 }
]
[
{ value1: 1, value2: 34, value3: 13, value4: 0.5, value5: 32 },
{ value1: 1, value2: 9, value3: 13, value4: 0.5, value5: 311 }
]
[
{ value1: 4, value2: 34, value3: 14, value4: 1, value5: 32 },
{ value1: 4, value2: 9, value3: 14, value4: 1, value5: 311 }
]
[
{ value1: 9, value2: 34, value3: 15, value4: 1.5, value5: 32 },
{ value1: 9, value2: 9, value3: 15, value4: 1.5, value5: 311 }
]
[
{ value1: 16, value2: 34, value3: 16, value4: 2, value5: 32 },
{ value1: 16, value2: 9, value3: 16, value4: 2, value5: 311 }
]
当我在 for 循环中 console.log(arr2) 时,我几乎得到了我想要的结果,但不是在一个数组中。
[
{ value1: 0, value2: 34, value3: 12, value4: 0, value5: 32 },
{ value1: 0, value2: 9, value3: 12, value4: 0, value5: 311 }
]
[
{ value1: 1, value2: 34, value3: 13, value4: 0.5, value5: 32 },
{ value1: 1, value2: 9, value3: 13, value4: 0.5, value5: 311 }
]
[
{ value1: 4, value2: 34, value3: 14, value4: 1, value5: 32 },
{ value1: 4, value2: 9, value3: 14, value4: 1, value5: 311 }
]
[
{ value1: 9, value2: 34, value3: 15, value4: 1.5, value5: 32 },
{ value1: 9, value2: 9, value3: 15, value4: 1.5, value5: 311 }
]
[
{ value1: 16, value2: 34, value3: 16, value4: 2, value5: 32 },
{ value1: 16, value2: 9, value3: 16, value4: 2, value5: 311 }
]
预期结果:
[
{ value1: 0, value2: 34, value3: 12, value4: 0, value5: 32 },
{ value1: 0, value2: 9, value3: 12, value4: 0, value5: 311 },
{ value1: 1, value2: 34, value3: 13, value4: 0.5, value5: 32 },
{ value1: 1, value2: 9, value3: 13, value4: 0.5, value5: 311 },
{ value1: 4, value2: 34, value3: 14, value4: 1, value5: 32 },
{ value1: 4, value2: 9, value3: 14, value4: 1, value5: 311 },
{ value1: 9, value2: 34, value3: 15, value4: 1.5, value5: 32 },
{ value1: 9, value2: 9, value3: 15, value4: 1.5, value5: 311 },
{ value1: 16, value2: 34, value3: 16, value4: 2, value5: 32 },
{ value1: 16, value2: 9, value3: 16, value4: 2, value5: 311 }
]
这是因为对象是通过引用工作的。这应该工作: 替换为:
arr2 = arr1.map(function(record){
record.value1 = b.value1;
record.value3 = b.value3;
record.value4 = b.value4;
return record;
})
在你的代码中这样写:
arr2 = arr1.map(function(record) {
const tempRecord = {...record}
tempRecord.value1 = b.value1;
tempRecord.value3 = b.value3;
tempRecord.value4 = b.value4;
return tempRecord;
})
您可以通过这样做来完成最终结果: arr3.flat();