变量javascript的快照
我试图保留某个变量的记录数组,但每当我推送该变量时,它不会推送该变量的实例,而是推送该变量本身变量javascript的快照,javascript,Javascript,我试图保留某个变量的记录数组,但每当我推送该变量时,它不会推送该变量的实例,而是推送该变量本身 var array = [0,0,0]; var record = []; record.push(array); for(var i=0;i<array.length;i++) { array[i]++; } record.push(array); console.log(record); //I need record to be [[0,0,0],[1,1,1]], but it
var array = [0,0,0];
var record = [];
record.push(array);
for(var i=0;i<array.length;i++) {
array[i]++;
}
record.push(array);
console.log(record);
//I need record to be [[0,0,0],[1,1,1]], but it gives two copies of the latter
var数组=[0,0,0];
var记录=[];
记录。推送(数组);
对于(var i=0;i您可以在数组上使用“slice”(第一个参数为可选的“0”),以获得它的克隆:
var array = [0,0,0];
var record = [];
record.push(array.slice(0));
for(var i=0;i<array.length;i++) {
array[i]++;
}
record.push(array.slice(0));
console.log(record);
// record is: [[0, 0, 0], [1, 1, 1]]
var数组=[0,0,0];
var记录=[];
record.push(array.slice(0));
对于(var i=0;i,您可以使用内置函数来执行此操作:
var record = array.slice(0);
ref:克隆阵列
Array.slice
是一个更昂贵的操作()。
相反,您可以这样做:
const array = [0,0,0];
const record = [Object.values(array)];
for(var i = 0; i < array.length; i++) {
array[i]++;
}
record.push(array);
console.log(record);
您需要将数组复制到一个新的临时数组中。它不是推送变量,而是推送变量引用的数组。您只在代码中创建了两个数组,其中一个是record
。如果希望每一行记录都是另一个数组,则需要为每一行创建一个数组。您可以通过复制arr来实现这一点ay
(例如使用数组.slice(0)
),或者在循环中使用另一个数组文本,然后用正确的值填充它。谢谢,slice函数似乎正在工作。只需.slice()
就可以了(这是最常见的用法),不需要.slice(0)
。
1) [...arr]
2) [].concat(arr);
3) arr.slice();
4) arr.map(i => i);
5) Array.of(...arr);
6) Object.values(arr);
7) Object.assign([], arr);
8) JSON.parse(JSON.stringify(arr));
etc...