如何将一个变量多次推入数组而不改变它?
How do you push a variable into an array multiple times without it changing?
我正在尝试将一些值推送到一个名为“Brain.js”的数组中。当将变量存储在数组中并稍后更改它时,存储在数组中的所有变量都会更改。有人可以帮助我做到这一点,这样他们就不会改变吗?我遇到了很多麻烦。
这是一个例子:
var hold = ([
]);
var a = [1, 1, 1]
var b = [2];
hold.push(
{ input: a, output: b }
);
console.log(hold); // returns [ { input: [ 1, 1, 1 ], output: [ 2 ] } ]
a[2] = 2;
b = [3];
hold.push(
{ input: a, output: b }
);
console.log(hold);
// Expected output: [ { input: [ 1, 1, 1 ], output: [ 2 ] }, { input: [ 1, 1, 2 ], output: [ 3 ] } ]
// What it really returns: [ { input: [ 1, 1, 2 ], output: [ 2 ] }, { input: [ 1, 1, 2 ], output: [ 3 ] } ]
问题是您正在更新现有数组 a
,该数组已在您推送的第一个对象中被引用。如果您不想修改现有数组,您应该创建一个副本。
var hold = ([
]);
var a = [1, 1, 1]
var b = [2];
hold.push({
input: a,
output: b
});
console.log(hold);
a = [...a]; // create a new copy of a
a[2] = 2;
b = [3];
hold.push({
input: a,
output: b
});
console.log(hold);
问题是,您没有将实际数字推入数组,而是引用。换句话说,您传递了两次对同一对象的引用。
您可以做的是在将对象传递给 hold 时创建对象的副本。你可以使用例如。传播运算符。
hold.push(
{
input: ...a,
output: ...b
}
);
你可以在这里找到更多
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
我正在尝试将一些值推送到一个名为“Brain.js”的数组中。当将变量存储在数组中并稍后更改它时,存储在数组中的所有变量都会更改。有人可以帮助我做到这一点,这样他们就不会改变吗?我遇到了很多麻烦。
这是一个例子:
var hold = ([
]);
var a = [1, 1, 1]
var b = [2];
hold.push(
{ input: a, output: b }
);
console.log(hold); // returns [ { input: [ 1, 1, 1 ], output: [ 2 ] } ]
a[2] = 2;
b = [3];
hold.push(
{ input: a, output: b }
);
console.log(hold);
// Expected output: [ { input: [ 1, 1, 1 ], output: [ 2 ] }, { input: [ 1, 1, 2 ], output: [ 3 ] } ]
// What it really returns: [ { input: [ 1, 1, 2 ], output: [ 2 ] }, { input: [ 1, 1, 2 ], output: [ 3 ] } ]
问题是您正在更新现有数组 a
,该数组已在您推送的第一个对象中被引用。如果您不想修改现有数组,您应该创建一个副本。
var hold = ([
]);
var a = [1, 1, 1]
var b = [2];
hold.push({
input: a,
output: b
});
console.log(hold);
a = [...a]; // create a new copy of a
a[2] = 2;
b = [3];
hold.push({
input: a,
output: b
});
console.log(hold);
问题是,您没有将实际数字推入数组,而是引用。换句话说,您传递了两次对同一对象的引用。
您可以做的是在将对象传递给 hold 时创建对象的副本。你可以使用例如。传播运算符。
hold.push(
{
input: ...a,
output: ...b
}
);
你可以在这里找到更多 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax