2012-09-17 44 views
2

我有一个对象数组(JSONized)。这样的事情:搜索Json对象中的元素

popUpList = [{ 
    "id":1, 
    "Name":"My Pop Up", 
    "VideoUrl":"www.xyz.com/pqr", 
    "AddToBasketUrl":"www.abc.com?addtoBaketid=1", 
    "addedToBasket": true 
}, 
{ 
    "id":2, 
    "Name":"My 2nd Pop Up", 
    "VideoUrl":"www.xyz.com/mno", 
    "AddToBasketUrl":"www.abc.com?addtoBaketid=2", 
    "addedToBasket": false 
}] 

我的情况是一个剪辑可以从他弹出或添加主页面。所以,我需要在页面添加一些内容时编辑JSON对象。

我尝试使用$ .inArray()和类似的方法。我认为,我不是以正确的方式去做或者错过了一些东西。或者,这不能用于JSON对象,我必须遍历每个对象。

任何帮助将不胜感激。

回答

0

Array.indexOf(什么$.inArray是)确实需要该元素来搜索并返回其索引。

如果你需要搜索你不知道以前的元素,你需要手动循环(如下划线利布斯有佣工):

var idToSearchFor = …; 
for (var i=0; i<popUpList.length; i++) 
    if (popUpList[i].id == idToSearchFor) { 
     // do something 
    } 

如果你想建立一个索引提高访问速度弹出窗口,你也可以做到这一点。它还具有明确的优点(每个ID只有一个元素):

var popUpsById = {}; 
for (var i=0; i<popUpList.length; i++) 
    popUpsById[popUpList[i].id] = popUpList[i]; 

if (idToSearchFor in popUpsById) 
    // do something with popUpsById[idToSearchFor] 
else 
    // create one? 
+0

非常感谢。管理解决问题。功能popUpVideoIndex(clipBinItemId){var_liteIndex = -1; $。每个(popUpVideoList,功能(I,V){ 如果(v.ClipId == clipBinItemId){ 的ItemIndex = I; 返回的ItemIndex; } }); return itemIndex; } 这不会处理整个循环,而是循环直到它符合标准。我的JSOn的目标不是很小,但现在就完成这项工作。非常感谢您的帮助:)干杯 – Alok

0

我不太清楚你想搜索明确地,你可以通过访问您的对象中的每个值是什么:

vat id = "1"; 

    // this given example wont work for you bec. of your structure 
    // but its all about the idea. 

    var objectOne = yourJsonObject[id]; 

    // You can also append them 
    var myValue = yourJsonObject.address.zip; 

而且similiar上取出的第一对象的任何其他项目。

对于我将创建一个自定义搜索功能,这将看起来像:

$.each(popUpList, function(i, v) { 
    var entryYouWantToFind = "addedToBasket"; 
     if(v[entryYouWantToFind]) 
     { 
      // do your stuff here. 
     } 
    } 
}); 

我希望我可以给你的提示。