Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么可以';t我使用数组作为';指定条件';在一个循环中?_Javascript_Arrays_While Loop - Fatal编程技术网

Javascript 为什么可以';t我使用数组作为';指定条件';在一个循环中?

Javascript 为什么可以';t我使用数组作为';指定条件';在一个循环中?,javascript,arrays,while-loop,Javascript,Arrays,While Loop,所以我有这个代码: var myArray = []; var value = 5; while (myArray != [5, 4, 3, 2, 1, 0]) { myArray.push(value) value--; console.log(myArray); } 当我看控制台时,它会像这样进行无限循环 [ 5 ] [ 5, 4 ] [ 5, 4, 3 ] [ 5, 4, 3, 2 ] [ 5, 4, 3, 2, 1 ] [ 5, 4, 3, 2, 1, 0 ]

所以我有这个代码:

var myArray = [];

var value = 5;

while (myArray != [5, 4, 3, 2, 1, 0]) {

  myArray.push(value)

  value--;

  console.log(myArray);

}
当我看控制台时,它会像这样进行无限循环

[ 5 ]
[ 5, 4 ]
[ 5, 4, 3 ]
[ 5, 4, 3, 2 ]
[ 5, 4, 3, 2, 1 ]
[ 5, 4, 3, 2, 1, 0 ]
[ 5, 4, 3, 2, 1, 0, -1 ]
[ 5, 4, 3, 2, 1, 0, -1, -2 ]
[ 5, 4, 3, 2, 1, 0, -1, -2, -3 ]

为什么不停在[5,4,3,2,1,0]处?myArray=在某个点,for循环应该停止否


很抱歉提出这个问题。

JavaScript不提供对数组结构相等性的内置支持,但实现比较器非常简单:

函数arraysEqual(a,b,orderSensitive=true){
//作用于https://stackoverflow.com/a/16436975/159145
//但修改后添加了“orderSensitive”选项。
如果(a==b)返回true;
如果(a==null | | b==null)返回false;
如果(a.length!=b.length)返回false;
如果(!订单敏感){
a=数组.from(a).sort();
b=数组.from(b).sort();
}
对于(变量i=0;i
@Christopher Barreto欢迎来到StackOverflow。祝你的有趣问题好运

尽管@Dai的完整答案是正确的,但有一种更简单的方法可以将数组转换为字符串,然后进行比较

这将对你有用:

var myArray=[];
var值=5;
而(myArray.toString()!=[5,4,3,2,1,0].toString()){
myArray.push(值)
价值--;
log(myArray);
}
或者,如果您愿意:

while ((''+myArray) != ('' + [5, 4, 3, 2, 1, 0]))

如果两个数组的索引和值不同,可以使用以下方法解决此问题

while(sortArray(myArray).toString() !== sortArray([5, 4, 3, 2, 1, 0]).toString()) {
// your code
}

sortArray(array) {
  return array.filter((a, b) => a-b)
}
如果确定两个数组的数组索引和值相同,则可以使用

while(myArray.toString() !== [5, 4, 3, 2, 1, 0].toString()) {
// your code
}

它不起作用,因为具有相同内容的两个数组在系统中的引用不相等-请在控制台中尝试此操作。只需使用
value>-1
作为条件。谢谢@Ori Drori,我不知道数组不能彼此相等。。当我在控制台中尝试时,我看到“false”。是值>-1工作正常。谢谢你的解释!如果(值>=0),请尝试
{
这太棒了,谢谢你了,佩里。它实际上是将数组转换成字符串,然后比较字符串。我必须将这一个添加到我的笔记中。但是字符串转换效率非常低-我强烈建议不要在生产代码中使用它,因为
[5,4,3,2,1,0]
将在每次
循环重复时重新生成。并非所有代码都是生产代码。知道如何快速编写代码是一项基本技能。此外,这种方法在
c
或'asm'中用于转换。因此,如果在第一个答案中使用
,则比所有
要快得多。