javascript数组比较循环多次

Ale*_*014 1 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);
            }
Run Code Online (Sandbox Code Playgroud)

^^此代码适用于上面,

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

我只需要它被召唤一次.有谁有任何想法?这是我不在的声明.我试过这个:

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

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

        console.log("increment");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

        console.log("increment");
    }
}
Run Code Online (Sandbox Code Playgroud)

并且每次都触发.

谢谢

编辑:一旦满足if条件,我试图突破for循环.

lus*_*chn 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");
}
Run Code Online (Sandbox Code Playgroud)

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

indexOf将不起作用,因为名称不是键.有一个很好的过滤方法,但在这种情况下不值得.您还可以在此主题中查看答案以获取更多解决方案:如何检查数组是否包含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;
}
Run Code Online (Sandbox Code Playgroud)