我有这个包含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');
}
});
});
我们的想法是遍历数组并检查值是否存在,然后返回“是”或“否”的警报。问题是,它显示每个对象的警报消息,我只想显示它是否在整个数组中。
我如何做到这一点?
答案 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`);
}
});