我的代码到目前为止
var chartSeriesArray = [{"EnableAnimation": true,"AnimationDuration": 1}];
let refArray = chartSeriesArray;
let clonedArray = [...chartSeriesArray]; // will clone the array
var x = [];
for(i=0;i<2;i++){
x.push(clonedArray);
}
x[0].foo = "bar";
console.log(x);
控制台输出
0:[{…}, foo: "bar"]
1:[{…}, foo: "bar"]
无论我是在两种情况下尝试循环refArray
还是clonedArray
,都会在0
和1
项中添加foo,我想例如,仅在0
中添加。
预期输出
0:[{…}, foo: "bar"]
1:[{…}]
我想稍后单独访问0
和1
。
我尝试了一切,但没有任何作用,任何帮助都非常感谢。
在所有建议之后,当我尝试下面的代码时
var metadata =
{
"KPISDetail": [{
"ChartSeriesList": {
"EnableAnimation": true,
"AnimationDuration": 1
}
}, {
"ChartSeriesList": {
"EnableAnimation": true,
"AnimationDuration": 1
}
}]
}
var data = [];
var x = [];
for(var l=0;l<2;l++){
data.push(metadata.KPISDetail[l].ChartSeriesList);
x.push(...data.map(o => Object.assign({}, o)))
}
x[0].foo = "bar";
x[1].foo = "foo";
console.log(x);
结果应为2,因为我的循环执行了2次。但我输出3次,这是错误的。我的输出低于输出
答案 0 :(得分:0)
您应该使用克隆元素创建数组克隆:
let clonedArray = chartSeriesArray.map((item) => Object.assign({}, item))
答案 1 :(得分:0)
您可以尝试以下操作:
var x = [];
for(i=0;i<2;i++){
let real_clone = clonedArray.slice(0); // if you need to clone an array
let real_clone = JSON.parse(JSON.stringify(clonedArray)); // if you need to clone both array and object
x.push(real_clone);
}
答案 2 :(得分:0)
问题是您创建了一个克隆数组并且多次推送。您需要为每次推送创建一个新的克隆数组。
var chartSeriesArray = [{"EnableAnimation":true,"AnimationDuration": 1}];
var x = [];
for(i=0;i<2;i++){
x.push([...chartSeriesArray]);
}
x[0].foo = "bar";
console.log(x);
&#13;
答案 3 :(得分:0)
你正在将clonedArray推入x 2时间,但你忘记了两次使用相同的变量,因此两者的内存分配是相同的,所以如果你想在x元素上添加一些东西,它们会反映在两者上。为了达到你想要的结果 -
var chartSeriesArray = [{"EnableAnimation": true,"AnimationDuration": 1}];
let refArray = chartSeriesArray;
let clonedArray = [...chartSeriesArray]; // will clone the array
var x = [];
for(i=0;i<2;i++){
x.push(JSON.parse(JSON.stringify(clonedArray))); // will create magic
}
x[0].foo = "bar";
console.log(x);
更新代码 -
var metadata =
{
"KPISDetail": [{
"ChartSeriesList": {
"EnableAnimation": true,
"AnimationDuration": 1
}
}, {
"ChartSeriesList": {
"EnableAnimation": true,
"AnimationDuration": 1
}
}]
}
var data = [];
var x = [];
for(var l=0;l<2;l++){
x.push(JSON.parse(JSON.stringify(metadata.KPISDetail[1].ChartSeriesList)))
}
x[0].foo = "bar";
x[1].foo = "foo";
console.log(x);