1

我有以下内容,我试图弄清楚如何搜索对象数组 - 该call()函数被多次调用?

var arr = [];
var newData;

function call() {
    newData = $('a').attr('href');

    if($.inArray(newData, arr) == -1) {
      $.post('/blah', function(data) {
          arr.push(data);
      });
    }
}

data[object{ }]这样arr变成了[[object{id='1', myUrl=''}], [object{id='2', myUrl='' }]]

我想弄清楚是否newData包含在arr?

4

2 回答 2

1

如果数组包含对象,$.inArray将不起作用。这是因为对象仅在它们是相同对象时才相等,而不仅仅是包含相同的值。

$.inArray在这里也不起作用,因为newData它是一个字符串。它不会为您在每个对象中搜索,您需要自己使用自己的循环进行搜索。

像这样的东西:

newData = $('a').attr('href');
$.each(arr, function(){
    if(this.myUrl === newData){
        $.post('/blah', function(data) {
            arr.push(data);
        });
        return false; // break once a match is found
    }
});
于 2012-04-05T14:53:04.483 回答
0

该数组arr将包含一个对象列表。为什么会newData被“包含”在内arr?它们是两个独立的变量。

更新 - 经过进一步检查,这条线不好:

if($.inArray(newData, arr) == -1) {

您本质上是在说在 arr (为空)中查找 newData 。

更新 - 这是一些应该工作的示例代码。在这里,我将数据视为具有名为“url”的属性的普通旧对象(不是对象数组)。

http://jsfiddle.net/nWh6N/

于 2012-04-05T14:36:04.573 回答