如何使用JavaScript避免if-else在n次迭代中出错

如何使用JavaScript避免if-else在n次迭代中出错,javascript,if-statement,Javascript,If Statement,例如,我有以下代码: var Foo = [1,2,3,4]; function searchInFoo(n) { for(var i = 0, arrayLength = Foo.length; i < arrayLength; i++) { if(Foo[i] === n) { console.log("N: " + n + " found!"); } else { console.log("N:

例如,我有以下代码:

var Foo = [1,2,3,4];

function searchInFoo(n) {
    for(var i = 0, arrayLength = Foo.length; i < arrayLength; i++) {
        if(Foo[i] === n) {
            console.log("N: " + n + " found!");
        } else {
            console.log("N: " + n + " not found!");
        }
    }
}


searchInFoo(4);
var Foo=[1,2,3,4];
函数searchInFoo(n){
对于(变量i=0,arrayLength=Foo.length;i
正如我所期望的,我有n个元素的ifoo数组,我也有n次for循环的迭代。那很酷。所以,如果我用任意n个参数调用searchInFoo函数,我的函数也会执行if-else语句中的所有块n次。例如,在上面的示例中,我记录了一次“n已找到”,并记录了三次“n:n未找到!”

在不丢失一些基本错误捕获功能的情况下,避免在else块中执行的最佳方法是什么?当我省略整个else块时,实际会发生什么情况,如下所示:

var Foo = [1,2,3,4];

function searchInFoo(n) {
    for(var i = 0, arrayLength = Foo.length; i < arrayLength; i++) {
        if(Foo[i] === n) {
            console.log("N: " + n + " found!");
        } 
    }
}


searchInFoo(1);
var Foo=[1,2,3,4];
函数searchInFoo(n){
对于(变量i=0,arrayLength=Foo.length;i
在这种情况下,您不需要循环:

var foo = [1,2,3,4];

function searchInFoo(n) {
    if(foo.indexOf(n) > -1) {
        console.log("N: " + n + " found!");
    } 
}
searchInFoo(1);
注意:不要将变量名大写,将其留给构造函数使用

或者更简单一点:

function searchInFoo(n) {
    return foo.indexOf(n) > -1;
}
console.log(searchInFoo(1) ? 'found' : 'not found');

再次阅读您的问题后,我相信您正在寻找更通用的内容,如和(MDN上提供polyfills)。一个迭代给定数组并在每个项上运行函数的函数怎么样

function myforeach(arr, fn) {
    for(var i=0; i<arr.length; i++) {
        fn(arr[i]);
    }
}
myforeach([1,2,3], function(el) {
    console.log(el === 1);
}); // logs true, false, false

请注意,Array.indexOf是ECMA5规范的一部分,因此无法在较旧的浏览器上工作。如果需要的话你可以用a是的,我总是忘了。这样一个基本的方法。。。它从一开始就可用于字符串。无论如何,现在您已链接到多边形填充,此答案已完成!:-)谢谢。@bfavareto我忘了提到,我在对象上使用了类似的表达式,遍历临时数组中推送的所有对象,而不是在满足条件的情况下记录对象的属性,如:'code'if(n==Foo[I].someProperty)'code'@bfavareto在数组中的每个项上运行函数,我一点都没有想到。我确信有一种天生的方法可以逃出另一个块。如果你想在中间中止循环(比如当你寻找一个值,并且已经找到它)时,循环中的<代码>返回<代码> > <代码>中断< /代码>是有用的。没有,因为您希望循环数组中的所有对象。您的场景听起来像是
map
的完美用例(我的答案中有链接)。我用一个自定义的类似地图的函数的例子编辑了答案,希望对你有所帮助@如果省略了
else
块且测试为false,则跳过if块内的代码,for循环继续。
function mymap(arr, fn) {
    var retArray = [];
    for(var i=0; i<arr.length; i++) {
        retArr.push(fn(arr[i]));
    }
    return retArray;
}
var validated = myforeach([1,2,3], function(el) {
    return el === 1;
}); // returns [true, false, false]