【问题标题】:AngularJS checking if a field within an object array existsAngularJS 检查对象数组中的字段是否存在
【发布时间】:2015-07-06 22:19:29
【问题描述】:

我有一个这样的数据模型:

var array =  [{id:1, name:"foo"}, {id:2, name:"bar"}, {id:3 name:"september"}];

我想遍历数组并查看 id:3 是否存在,我该怎么做?

【问题讨论】:

  • 我会说你应该遍历数组,看看id属性是否等于3
  • 您在问题的哪个方面遇到了问题?你了解如何遍历数组吗?
  • @teddybear123 你不是在id:3 之后缺少, 吗?更新了我的答案。

标签: javascript arrays angularjs loops


【解决方案1】:

只需使用 AngularJS filter,这些正是为此目的而制作的:

var results = $filter('filter')(array, {id : 3}, true);

results 将包含一个对象数组(可能不止一个),其属性id 等于3

如果results 的长度为零,则没有匹配过滤器的元素。
如果您知道,只有一种可能的结果,您可以直接使用results[0] 检索它。

使用过滤器的优点是您可以通过扩展过滤器表达式{id : 3}轻松过滤多个属性值。

干杯,

【讨论】:

    【解决方案2】:

    这更像是一个 js 问题而不是 Angular 问题。如果您使用的是 lodash 之类的库,这非常简单:

    _.findWhere(array, {'id': 3})
    

    在普通的 javascript 中,这并不复杂。这是一个 EcmaScript 5 解决方案,它利用函数 some

    array.some(function(elem) {
        return elem.id === 3;
    });
    

    【讨论】:

      【解决方案3】:

      奇怪,你在id:3 之后缺少,

      它更像是一个 javaScript 循环遍历一个数组而不是一个 AngularJS 方式,

      var array =  [{id:1, name:"foo"}, {id:2, name:"bar"}, {id:3, name:"september"}];
      
      for(var i in array){
          if(array[i].id === 3){
               console.log("found 3");
              //do something here.
               }
      }
      

      【讨论】:

        【解决方案4】:

        你甚至不需要 lodash。原生 JavaScript:

        (array.filter(function(a) {return a.id === 3})
        

        如果有,则返回一个仅包含 id 为 3 的元素的数组,否则返回一个空数组。

        【讨论】:

          【解决方案5】:

          你可以用纯 JavaScript 做到这一点:

          array.find(function(element){
              if(element.id == 3) return true;
          })
          

          【讨论】:

          • find 是一种 ECMAScript 2015 方法,因此它目前对浏览器的支持很差。
          猜你喜欢
          • 2017-03-22
          • 2017-03-09
          • 2014-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多