jQuery:遍历json中的所有元素

时间:2015-09-07 10:53:29

标签: jquery json

我有这个包含SubmitKey的json文件。

[
  {
    SubmitKey: "20150907-11-34-08-445"
  },
  {
   SubmitKey: "20150907-12-23-34-263"
  }
]

然后我使用jQuery将json调用到数组中,然后检查' KeyID'是否在数组中,使用此代码:

var KeyID = '20150907-12-23-34-263';
jQ.getJSON("data/submit.php", function (myArray){   
    jQ(myArray).each(function() {
            if (this.SubmitKey == KeyID) {
                        alert('I found it');
            }
            else {
                alert('its not in there');
            }
    });

});

我们的想法是遍历数组并检查值是否存在,然后返回“是”或“否”的警报。问题是,它显示每个对象的警报消息,我只想显示它是否在整个数组中。

我如何做到这一点?

3 个答案:

答案 0 :(得分:1)

作为替代解决方案,您可以使用Array.prototype.some(),其中:

  

如果此数组中至少有一个元素满足提供的测试函数,则返回true。

您的测试功能如下所示:

function compareKeyId(element, index) {
    return element.SubmitKey == KeyID;
}

然后你就像这样使用它:

jQ.getJSON("data/submit.php", function (myArray){   
    if(myArray.some(compareKeyId)) {
        alert('Found.');
    }
    else {
        alert('Not found.');
    }
});

注意:如链接MDN页面底部附近所述,Internet Explorer仅支持版本9以后的some功能。如果您需要支持以下版本的IE,那么除非您使用建议的polyfill,否则这不会是一个选项。

答案 1 :(得分:0)

如果我理解你的问题,这应该有效:

var KeyID = '20150907-12-23-34-263';
jQ.getJSON("data/submit.php", function (myArray){   
var allOk = true;
jQ(myArray).each(function() {
    if (this.SubmitKey != KeyID) {
       allOk = false;
       break; // If any one element is different, we break the loop
    } 
});
if (allOk) alert('I found It');

我希望它有所帮助。

});

答案 2 :(得分:0)

您收到每个对象的提醒的原因是您的else块中有alert语句。

删除其他部分,如果在alert中找不到keyID,则无法获得任何myArray

如果你想首先扫描整个数组并检查KeyID是否存在,那么你可以通过将变量设置为某个值来完成,然后一旦循环结束,验证该变量的值然后显示警报。

var KeyID = '20150907-12-23-34-263';
jQ.getJSON("data/submit.php", function (myArray){   
    var isPresent = false;
    jQ(myArray).each(function() {
        if (this.SubmitKey == KeyID) {
            isPresent = true;
            break;
        }
    });
    if(isPresent){
        alert('I found it`);
    }
});