关于javascript:Arrays和For循环JS的逻辑问题

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
};

因此,现在应该清楚的是,第二个数组满足您的目的,而第一个数组不满足您的目的。实际上,第一个元素检查除第一个元素以外的其他元素是否等于第一个元素。