Nodejs 代码未按预期执行
Nodejs code is not executing as expected
我正在尝试下面的代码行。我想在每次外部 while
循环 迭代后将 numbers
保存在名为 sn
的数组中。但是,在每次迭代后 sn
仅包含最后一次迭代的 numbers
。可能是我缺少 sync
和 async
的整个概念。
function test() {
var numbers = [0, 2, 7, 0];
var check = true;
var sn = [];
var p = 0;
while (check) {
var index = numbers.indexOf(Math.max(...numbers));
var value = Math.max(...numbers);
numbers[index] = 0;
for (var i = value; i > 0; i--) {
var temp = ++index;
index = temp % (numbers.length);
numbers[index] += 1;
}
console.log("numbers", numbers);
if (sn.includes(numbers)) { check = false };
sn.push(numbers);
console.log("hey there=========");
}
}
test();
这个 if 语句:if (sn.includes(numbers)) { check = false };
永远不会为真,因为 Array.prototype.includes() 方法不接受数组作为参数;只有个别元素。 numbers
是一个数组,因此永远不会是真实的。
如果您正在尝试查看数组是否包含子数组。 Mild Fuzz 在此堆栈溢出中的答案:Javascript array contains/includes sub array 应该有效。
此处与同步或异步无关。
这里发生的事情是,您试图将 'numbers' 数组推送到 'sn' 数组。
声明为"sn.push(numbers);"
所以这里我们将 numbers 数组的对象引用推送到 'sn',这意味着您不是在复制 numbers 数组并推送到 'sn'。
您只是在推送 'numbers' 数组的内存引用。
因此在第一次迭代期间,'sn' 将具有您计算的精确值。
但是在第二次迭代期间 'sn' 将有两个数组。但是这两个值是相同的并且指向相同的内存位置 'number'.
所以在这里你应该做的是在每次迭代期间创建一个 'numbers' 数组的克隆。
if (sn.includes(numbers)) { check = false };
var cloneArray = numbers.slice(0);
sn.push(cloneArray);
我正在尝试下面的代码行。我想在每次外部 while
循环 迭代后将 numbers
保存在名为 sn
的数组中。但是,在每次迭代后 sn
仅包含最后一次迭代的 numbers
。可能是我缺少 sync
和 async
的整个概念。
function test() {
var numbers = [0, 2, 7, 0];
var check = true;
var sn = [];
var p = 0;
while (check) {
var index = numbers.indexOf(Math.max(...numbers));
var value = Math.max(...numbers);
numbers[index] = 0;
for (var i = value; i > 0; i--) {
var temp = ++index;
index = temp % (numbers.length);
numbers[index] += 1;
}
console.log("numbers", numbers);
if (sn.includes(numbers)) { check = false };
sn.push(numbers);
console.log("hey there=========");
}
}
test();
这个 if 语句:if (sn.includes(numbers)) { check = false };
永远不会为真,因为 Array.prototype.includes() 方法不接受数组作为参数;只有个别元素。 numbers
是一个数组,因此永远不会是真实的。
如果您正在尝试查看数组是否包含子数组。 Mild Fuzz 在此堆栈溢出中的答案:Javascript array contains/includes sub array 应该有效。
此处与同步或异步无关。
这里发生的事情是,您试图将 'numbers' 数组推送到 'sn' 数组。
声明为"sn.push(numbers);"
所以这里我们将 numbers 数组的对象引用推送到 'sn',这意味着您不是在复制 numbers 数组并推送到 'sn'。 您只是在推送 'numbers' 数组的内存引用。
因此在第一次迭代期间,'sn' 将具有您计算的精确值。
但是在第二次迭代期间 'sn' 将有两个数组。但是这两个值是相同的并且指向相同的内存位置 'number'.
所以在这里你应该做的是在每次迭代期间创建一个 'numbers' 数组的克隆。
if (sn.includes(numbers)) { check = false };
var cloneArray = numbers.slice(0);
sn.push(cloneArray);