【问题标题】:Test existence of JSON value in JavaScript Array测试 JavaScript 数组中 JSON 值是否存在
【发布时间】:2011-08-20 12:32:36
【问题描述】:

我有一个 JSON 对象数组,如下所示:

var myArray = [
  {name:'foo',number:2},
  {name:'bar',number:9},
  {etc.}
]

如何检测 myArray 是否包含 name="foo" 的对象?

【问题讨论】:

标签: javascript jquery arrays json


【解决方案1】:

除非我遗漏了什么,否则您至少应该使用 each 来提高可读性而不是 map。并且为了性能,你应该在找到你要找的东西后打破 each,没有理由继续循环:

var hasFoo = false;
$.each(myArray, function(i,obj) {
  if (obj.name === 'foo') { hasFoo = true; return false;}
});  

【讨论】:

    【解决方案2】:

    有了这个:

    $.each(myArray, function(i, obj){
       if(obj.name =='foo')
         alert("Index "+i + " has foo");
    });
    

    干杯

    【讨论】:

    • Array.prototype.each 不存在。您的意思是来自 jQuery 的 $.eachArray.prototype.forEach,只有较新的浏览器才支持。
    【解决方案3】:
    for(var i = 0; i < myArray.length; i++) { 
       if (myArray[i].name == 'foo') 
            alert('success!') 
     }
    

    【讨论】:

    • 不要使用for...in 循环数组。
    【解决方案4】:
    var hasFoo = false;
    $.map(myArray, function(v) {
      if (v.name === 'foo') { hasFoo = true; }
    });
    

    【讨论】:

    • 很好奇,为什么要映射而不是每个?
    • 我只是碰巧在对象上使用新的 jQuery 1.6 映射,所以这是我想到的第一件事。无法想象有性能差异,只需要克服返回值丢失到以太的悲伤。
    • 不会有人想到可怜的孤儿吧!
    • 缺点是不能提前终止循环(相对于each)。
    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    相关资源
    最近更新 更多