如果index为0(for循环中为i === 0),则执行某些操作,否则执行其他操作。没有通过其他情况

时间:2014-05-14 00:05:15

标签: javascript

我有这个代码,而且它没有通过for循环中的'else'情况。

function ArithGeo(arr) 
{
    var arithStep = 0, geoStep = 0, arith = [], geo = [];

    for (var i = 0; i < arr.length; i++) 
    {
        if (i === 0) 
        {
            arithStep = arr[i + 1] - arr[i];
            geoStep = arr[i + 1] / arr[i];
        } 
        else 
        {
            // Not going here.
            console.log("i !== 0");
            if (arr[i] - arr[i - 1] !== arithStep) 
                arith.push("false");

            console.log(arr[i] / arr[i - 1]);

            if (arr[i] / arr[i - 1] !== geoStep) 
                geo.push("false");
        }

        if (geo.indexOf("false") == -1) 
            return "Geometric";
        else if (arith.indexOf("false") == -1) 
            return "Arithmetic";
        else 
            return -1;
    }
}

// Arithmetic example: [2, 4, 6, 8] and Geometric example: [2, 6, 18, 54].
console.log(ArithGeo([2, 4, 8, 15]));

也尝试了else if (i !== 0),但也没有触发阻止。

小提琴:http://jsfiddle.net/vAW7d/

1 个答案:

答案 0 :(得分:2)

因为您在第一次迭代中返回。这会导致引擎完全离开该功能,因此在此之后它甚至没有机会测试i

尝试将第二个if / else块移到for循环之后:

for (var i = 0; i < arr.length; i++) {
    if (i === 0) {
        ...
    } else {
        ...
    }
}

if (geo.indexOf("false") == -1) {
    return "Geometric";
} else if (arith.indexOf("false") == -1) {
    return "Arithmetic";
} else {
    return -1;
}

另外,您可以使用布尔值而不是数组来改进此算法。最初只需将geoarith设置为true,如果您碰巧找到非几何/非算术步骤,请将它们设置为false。这也可以更容易地使代码中的某些评估短路。例如,当你知道它不是几何或算术序列时,你可以立即突破循环。

Demonstration