我有以下内容,我试图弄清楚如何搜索对象数组 - 多次调用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
?
答案 0 :(得分: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
}
});
答案 1 :(得分:0)
数组arr
将包含一个对象列表。为什么newData
中会arr
被“包含”?它们是两个独立的变量。
更新 - 经过进一步检查,这条线路不行:
if($.inArray(newData, arr) == -1) {
你实际上是在arr中寻找newData(它是空的)。
更新 - 以下是一些应该有效的示例代码。在这里,我将数据视为一个普通的旧对象(不是一个对象数组),其属性名为“url”。