2012-09-17 41 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. 
     } 
    } 
}); 

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