Bar*_*lsh 10 javascript filter
是否可以通过多个值过滤对象数组?
例如,在下面的示例中,我可以通过term_ids 5和6过滤它并同时键入car吗?
[
{
"id":1,
"term_id":5,
"type":"car"
},
{
"id":2,
"term_id":3,
"type":"bike"
},
{
"id":3,
"term_id":6,
"type":"car"
}
]
Run Code Online (Sandbox Code Playgroud)
如果它更容易使用库肯定是最好的.
San*_*yak 20
你可以用Array.filter来做
var data = [{
"id": 1,
"term_id": 5,
"type": "car"
},
{
"id": 2,
"term_id": 3,
"type": "bike"
},
{
"id": 3,
"term_id": 6,
"type": "car"
}
];
var result = data.filter(function(v, i) {
return ((v["term_id"] == 5 || v["term_id"] == 6) && v.type == "car");
})
console.log(result)Run Code Online (Sandbox Code Playgroud)
Abh*_*iro 11
以下功能将帮助您。
nestedFilter = (targetArray, filters) => {
var filterKeys = Object.keys(filters);
return targetArray.filter(function (eachObj) {
return filterKeys.every(function (eachKey) {
if (!filters[eachKey].length) {
return true;
}
return filters[eachKey].includes(eachObj[eachKey]);
});
});
};
Run Code Online (Sandbox Code Playgroud)
将此函数与如下所述的过滤器一起使用:
var filters = {
"id": ["3"],
"term_id": ["6"],
"type": ["car","bike"]
}
Run Code Online (Sandbox Code Playgroud)
不要传递空数组。如果数组中没有值,则在过滤器中跳过该属性。
结果将被过滤数组。
您可以使用普通的js filter()方法执行此操作,并用于&&测试这两种情况。
var data = [{"id":1,"term_id":5,"type":"car"},{"id":2,"term_id":3,"type":"bike"},{"id":3,"term_id":6,"type":"car"}];
var result = data.filter(function(e) {
return [5, 6].includes(e.term_id) && e.type == 'car'
});
console.log(result);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14808 次 |
| 最近记录: |