2017-07-30 82 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

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