Logical issue with Arrays and For loop JS
显然我的逻辑或者JS的逻辑有问题(哈哈)。我真的不明白为什么其中一个有效,另一个无效。这些函数用于检查数组中的每个索引是否相同。第一个可行,第二个不行,我看不出这两个逻辑有什么不同(除了改变位置的明显点)。1。
1 2 3 4 5 6 7 8 9 | function isUniform(x) { var first = x[0]; for(var i = 1; i < x.length; i++) { if(first === x[i]) { return true; i++; } } return false; }; |
2。
1 2 3 4 5 6 7 8 9 | function isUniform(x) { var first = x[0]; for(var i = 1; i < x.length; i++) { if(x[i] !== first) { return false; i++; } } return true; }; |
使用的数组:isuniform([1,1,1,2])和isuniform([1,1,1,1])
一旦返回到for循环中,循环停止,函数结束。
在第一个示例中,first永远不会等于x[i],因为从1开始i,first==x[0],所以循环将结束并返回false。
在第二个示例中,在i=1时总是返回false,因为x[1]!==x[0],因此在第一次检查后循环将始终返回false。
下面是一个关于您的函数如何在逐行级别上工作的分解(我在每条语句后都包含了注释):
1 2 3 4 5 6 7 8 9 | function isUniform(x) { var first = x[0]; //SET"FIRST" to first element in array for(var i = 1; i < x.length; i++) { //loop from second element to the end if(first === x[i]) { //if"FIRST" is equal to this element return true; //conclude that the ENTIRE ARRAY is uniform and quit function i++; //incremenet"i" (note, the loop automatically does this, so this will result in an extra increment } } return false; //conclude the array is not uniform IF THE FIRST ITEM IS UNIQUE }; |
下面是第二个函数的分解:
1 2 3 4 5 6 7 8 9 | function isUniform(x) { var first = x[0];//SET"FIRST" to first element in array for(var i = 1; i < x.length; i++) { //loop from second element to the end if(x[i] !== first) { //if this element is not equal to the first CONCLUDE THAT THE ARRAY IS NOT UNIFORM and quit function return false; i++; //again, extra un-needed increment, but it technically does not matter in this case } } return true; //CONCLUDE that since no items were NOT equal to the first item, the array is uniform }; |
因此,现在应该清楚的是,第二个数组满足您的目的,而第一个数组不满足您的目的。实际上,第一个元素检查除第一个元素以外的其他元素是否等于第一个元素。