2011-09-19 81 views
1

我已经建立了像这样的对象:jQuery的,如果对象具有价值

tabArray.push({'linkId': 'tabBuild', 'id': 'columnRight','url': '/pages/publish/', 'content':response}); 

我如何使用jQuery/JavaScript的做一个测试对象上,看它是否含有一定的网址?

我尝试这样做:if($.inArray('/pages/publish/', tabArray) > -1) alert('its in there');

,但无济于事!

+0

的[查找ID对象在javascript对象数组]可能重复(http://stackoverflow.com/questions/7364150/find-object-by- id-in-javascript-objects) –

回答

1

请尝试以下

var inArray = false; 
for (var i = 0; i < tabArray.length; i++) { 
    if (tabArray[i].url === '/pages/publish') { 
    inArray = true; 
    break; 
    } 
} 
+1

像这样在数组的每个元素上仔细地访问.url,它可能并不总是被定义的。 –

+4

@Skylar如果没有定义,那么它应该返回'undefined'并且不能与字符串文字进行比较。我不明白这会造成问题。 – JaredPar

+1

没有定义'url'就可以了。以这种方式访问​​它会将'undefined'返回到''/ pages/publish'',而代码将继续其快乐的方式。 – FishBasketGordo

0

$ .inArray是行不通的,因为它只是意味着当你的阵列是对象的数组来搜索字符串数组。你可以创建你自己的数组方法。

var inURLArray = function(url, array) { 
    for(var i in array) { 
    if(array[i].url && array[i].url === url) 
    return true; 
    } 
    return false; 
} 
+0

为什么在这里使用'=='而不是'==='?我不相信'array [i] .url &&'部分是必要的。如果'array [i] .url'没有被定义,那么它将返回'undefined'并且不能与'url'比较 – JaredPar

+0

你是对的==我的部分是个错误,我编辑为=== –

1

这应该工作:

var inArray = !!$.grep(tabArray, function(item) { 
     return item.url === '/pages/publish/'; 
    }).length; 

console.log(inArray); // true 
+0

不错。为简洁起见+1。 –

+0

谢谢。如果找到一个匹配,那么也许应该是-1而不是短路,但是迭代速度很快,并且如果性能权衡最小,我*通常会出于可读性考虑。 – jmar777