var a=[1,2,3];
var b=a;
b.push(4,5);
console.log(b);
console.log(a);
我想要一个值为[1,2,3]。但它打印[1,2,3,4,5]我怎样才能实现这一目标。请帮忙。提前致谢
答案 0 :(得分:2)
您正在将数组的对象引用分配给另一个变量。但是这里你要做的是复制数组以创建一个新实例。
var a=[1,2,3];
var b= a.slice(0);
b.push(4,5);
console.log(b); //[1,2,3,4,5]
console.log(a); //[1,2,3]
当传递的起始值为Array.prototype.slice
时, 0
将创建原始数组的副本。但是,如果您真的担心传递硬编码值,请使用call
的变体。
var b= [].slice.call(a);
答案 1 :(得分:0)
这是因为`对象引用。你需要深度克隆对象。
尝试进行深度克隆
var a=[1,2,3];
var b= JSON.stringify(JSON.parse(a));
b.push(4,5);
console.log(b); //[1,2,3,4,5]
console.log(a); //[1,2,3]
答案 2 :(得分:0)
让我们谈谈记忆 ......
std::map< std::array<std::array< int , 3>, 3>, int > m_opp =
{ { {{ { 1,2,3},
{ 3,4,1},
{ 1,1,1}
}},
0
},
{ {{
{ 1,2,3},
{ 1,1,2},
{ 1,1,1}
}},
1
}
};
保存在内存中,例如,地址为std::map< std::vector<std::vector< int > >, int > m_opp;
当您在代码中告诉我a
时,它只是在地址123
引用相同的b = a
,因此它们在内存中的位置相同,因此当您更改任何内容时他们改变了另一个
...所以你可以做的是通过这些方法之一为你的第二个阵列在内存中创建另一个地方
a
或强>
123
或强>
var b= a.slice(0);