javascript数组比较循环多次

时间:2014-10-15 07:13:17

标签: javascript arrays facebook-graph-api

所以我检索了一个包含facebook照片的对象,这些对象完全正常。

for (var i = 0; i < photoLikes.data.length; i++) {

            if (photoLikes.data[i].name === facebook.username) {
                alert("You have already liked this photo. Unliked");
                var count = photoLikes.data.length;
                //facebook.unlikePhoto(id, count);
            }

^^此代码在上面工作,

但问题是在查看数组中的名称ISNT 时, 它的作用是迭代每个项目,如果它不等于用户名(搜索用户名是否在对象中),则调用else语句。

我只需要调用一次。有谁有任何想法?这是我的声明,因为没有。 我试过这个:

for (var x = 0; x < photoLikes.data.length; x++) {

    if (facebook.photos.indexOf(facebook.username == -1)) {

        console.log("increment");
    }
}

for (var x = 0; x < photoLikes.data.length; x++) {

    if (photoLikes.data[i].name != facebook.username) {

        console.log("increment");
    }
}

并且每次都触发。

由于

编辑:一旦满足if条件,我就试图摆脱for循环。

4 个答案:

答案 0 :(得分:5)

基本上是user1680977的(非常好的)答案,但改进了一些设计模式(单个var,针对循环优化,类型安全比较):

var found = false,
    i, count;

for (i = 0, count = photoLikes.data.length; i < count; i++) {
    if (photoLikes.data[i].name === facebook.username) {
        found = true;
        break;
    }
}

if (found === false) {
    alert("The name was not found in the array");
}

如果你不需要,不要在循环中使用“else”,尽可能小而快地将代码保存在循环中。

indexOf无效,因为名称不是密钥。有一个很好的filter方法,但在这种情况下不值得。您还可以在此主题中查看答案以获取更多解决方案:How do I check if an array includes an object in JavaScript?

顺便说一下,这将是完美的功能,不需要休息:

function isUserInArray(likeArray, username) {
    var i, count;

    for (i = 0, count = likeArray.length; i < count; i++) {
        if (likeArray[i].name === username) {
            return true;
        }
    }
    return false;
}

答案 1 :(得分:1)

我不确定我知道你要完成什么。

如果你试图突破for循环,你可以简单地使用break命令。如果你想在for循环的所有迭代中执行一段代码,你可以这样做。

var executedElse = false;
for( ...... ){
    if( some-condition ){
        // do work
    } else {
        if( !executedElse ){
            // do work
            executedElse = true;
        }
    }
}

答案 2 :(得分:1)

或许像这样尝试

var found = false;
for (var i = 0; i < photoLikes.data.length; i++) {

    if (photoLikes.data[i].name == facebook.username) {
        found = true;
        break;
    }
}

if (found === false) {
    alert("The name was not found in the array");
}

答案 3 :(得分:1)

使用break声明:

for (var x = 0; x < photoLikes.data.length; x++) {

    if (facebook.photos.indexOf(facebook.username == -1)) {

        console.log("increment");
        break;
    }
}

MDN docs

您的if条件也是错误的。它应该是:

if (facebook.photos.indexOf(facebook.username) == -1) {
    ...
}