AngularJS检查对象数组中的字段是否存在

时间:2015-07-06 22:19:29

标签: javascript arrays angularjs loops

我有这样的数据模型:

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

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

5 个答案:

答案 0 :(得分:9)

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

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

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

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

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

干杯,

答案 1 :(得分:2)

这比js问题更像是一个问题。如果您使用像lodash这样的库,这非常简单:

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

在普通的javascript中,这并不复杂。这是一个EcmaScript 5解决方案,它使用了 some 功能:

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

答案 2 :(得分:1)

很遗憾,您在,

之后错过id:3

它更像是一个在Array上循环的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.
         }
}

答案 3 :(得分:0)

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

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

将返回一个数组,该数组只包含id为3的元素(如果有的话),否则为空数组。

答案 4 :(得分:0)

您可以使用纯JavaScript执行此操作:

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