如何在没有引用

时间:2018-04-05 06:13:37

标签: javascript arrays object

我的代码到目前为止

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,都会在01项中添加foo,我想例如,仅在0中添加。

预期输出

0:[{…}, foo: "bar"]
1:[{…}]

我想稍后单独访问01

我尝试了一切,但没有任何作用,任何帮助都非常感谢。

在所有建议之后,当我尝试下面的代码时

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次,这是错误的。我的输出低于输出

enter image description here

4 个答案:

答案 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)

问题是您创建了一个克隆数组并且多次推送。您需要为每次推送创建一个新的克隆数组。

&#13;
&#13;
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;
&#13;
&#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);