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'中用于转换。因此,如果在第一个答案中使用,则比所有要快得多。