0

我正在尝试确定一个对象是否包含特定值,以便我可以确保不会多次附加我要查找的值并防止递归。

我已经尝试了很多方法,但无法让它们中的任何一个起作用:

data = [
  {val:'xxx',txt:'yyy'},
  {val:'yyy',txt:'aaa'},
  {val:'bbb',txt:'ccc'}
];

console.log(jQuery.grep(data, function(obj){
    return obj.txt === "ccc";
}));
$.map(data, function(el) { 
    if(el.txt === 'ccc') 
        console.log('found')
});

这可以用 map() grep() 或 inArray() 来完成,还是我真的必须遍历整个数组来寻找值?

4

4 回答 4

2

data是一个包含多个对象的数组,因此您需要指定要查看的数组的索引:

data[0].val === 'xxx';
data[1].val === 'yyy';
data[2].txt === 'ccc';

作为对您的功能的更新,有什么问题$.each?无论如何,您都在使用 map 或 grep 进行循环,因此您不妨诚实点:P 您也可以使用循环for,但我正在举例,$.each因为它与您当前的代码几乎相同。

$.each(data, function(el) { 
  if(el.txt === 'ccc') 
    console.log('found')
});
于 2013-03-01T11:50:19.053 回答
0

您将不得不迭代整个数组,因为它是一个对象数组,并且比较对象是通过引用而不是值来完成的。

for (var i = 0; i < data.length; i++){
    if (data[i].val == 'something')
        doSomething();
}
于 2013-03-01T11:50:30.047 回答
0

如果您希望自己避免所有这些计算,有一个实用插件 underscore.js,它有很多帮助。

您正在寻找的帮助者之一http://underscorejs.org/#contains

于 2013-03-01T11:51:08.197 回答
0
var stExist=$.inArray(reqelement, dataArray)
于 2013-03-01T11:53:07.960 回答