繁体   English   中英

Node.js代码未按预期执行

[英]Nodejs code is not executing as expected

我正在尝试下面的代码行。 我想在外部while循环的每次迭代之后将numbers保存在名为sn的数组中。 但是,在每次迭代之后, sn仅包含最后一次迭代的numbers 可能是我缺少syncasync整个概念。

 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(); 

这里与同步或异步无关。

在这里发生的是,您正在尝试将“数字”数组推入“ sn”数组。

声明为“ sn.push(numbers);”

因此,在这里我们将数字数组的Object引用推送到'sn',这意味着您没有在复制数字数组并推送到'sn'。 您只是在推动“数字”数组的“内存”引用。

因此,在第一次迭代期间,“ sn”将具有您计算出的确切值。

但是在第二次迭代中,“ sn”将具有两个数组。 但是,这两个值是相同的,并且指向“ number”的相同存储位置。

因此,这里您应该做的是在每次迭代期间创建一个“数字”数组的克隆。

如果(sn.includes(numbers)){检查=假};

var cloneArray = numbers.slice(0);

sn.push(cloneArray);

这条if语句: if (sn.includes(numbers)) { check = false }; 永远不会为真,因为Array.prototype.includes()方法不接受数组作为参数; 仅单个元素。 numbers是一个数组,因此永远不会是真实的。

如果您尝试查看数组是否包含子数组。 Mild Fuzz在此堆栈中具有以下答案: Javascript数组包含/包含子数组应该起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM