2017-07-30 65 views
-1

我有一個對象列表。在每個對象上我都有一個數組。按ID數組篩選對象

實施例:

"-KpvPH2_SDssxZ573OvM" : { 
     "date" : "2017-07-25T20:21:13.572Z", 
     "description" : "Test", 
     "id" : [ { 
     0: "0a477fed-8944-9f5d-56fd-c95fe7663a07", 
     1: "0a477fed-8944-9f5d-56fd-c95fe7663a08" 
     } ] 
    }, 
    "-KpvPLSfotrZiBDeVOxU" : { 
     "date" : "2017-07-25T20:21:33.159Z", 
     "description" : "Test 2", 
     "id" : [ { 
     0: "6e79eadd-21b5-91cc-4b71-7ac1a42278b1" 
     } ] 
    } 

如何搜索使用ID數組作爲參數的對象?

當我只需要過濾一個數組時,我使用過濾器,一切正常。

var result = $.grep(items, function(e){ return e.id == id; }); 

但在這種情況下,我認爲它不起作用。

感謝

+0

你的數據不正確。在這樣的一個對象中不能有兩個'id'屬性:'{ 「id」:「0a477fed-8944-9f5d-56fd-c95fe7663a07」, 「id」:「0a477fed-8944-9f5d-56fd- c95fe7663a08「 }' – Nisarg

+0

我編輯過,是否正確? –

+0

看起來有效。我發佈了一個答案。希望能幫助到你。 – Nisarg

回答

1

由於ID是在對象得更深一些,而且他們是一個對象的一部分,我認爲更好的方法(相對於$.grep)將是一個自定義過濾器。在這裏,我假設你想根據你的問題進行精確的比較。但是您也可以輕鬆地與indexOf進行部分比較。

var data = { 
 
    "-KpvPH2_SDssxZ573OvM": { 
 
    "date": "2017-07-25T20:21:13.572Z", 
 
    "description": "Test", 
 
    "id": [{ 
 
     0: "0a477fed-8944-9f5d-56fd-c95fe7663a07", 
 
     1: "0a477fed-8944-9f5d-56fd-c95fe7663a08" 
 
    }] 
 
    }, 
 
    "-KpvPLSfotrZiBDeVOxU": { 
 
    "date": "2017-07-25T20:21:33.159Z", 
 
    "description": "Test 2", 
 
    "id": [{ 
 
     0: "6e79eadd-21b5-91cc-4b71-7ac1a42278b1" 
 
    }] 
 
    } 
 
}; 
 

 
//console.log(data); 
 
var inputID = "0a477fed-8944-9f5d-56fd-c95fe7663a08"; 
 
var filteredData = []; 
 

 
for (var prop in data) { 
 
    if(data.hasOwnProperty(prop)) { 
 
    var item = data[prop]; 
 
    var itemIDs = item.id[0]; 
 
    
 
    for(var id in itemIDs) { 
 
     if (itemIDs[id] == inputID) { 
 
     filteredData.push(item); 
 
     } 
 
    } 
 
    } 
 
} 
 

 
console.log(filteredData);

+0

非常感謝,它非常完美! –