Sch*_*4rz 8 javascript arrays filter
我想知道是否有更优雅的方式来做到这一点.假设我有一个像这样的对象数组:
a = [
{
"id": "kpi02",
"value": 10
},
{
"id": "kpi02",
"value": 30
},
{
"id": "kpi02",
"value": 11
},
{
"id": "kpi02",
"value": 33
},
{
"id": "kpi03",
"value": 1
},
{
"id": "kpi03",
"value": 0.5
},
{
"id": "kpi04",
"value": 0.5
}
]
Run Code Online (Sandbox Code Playgroud)
现在我想要对id属性进行过滤,以返回在另一个数组中匹配的所有对象
var kpis = ["kpi03", "kpi02"];
Run Code Online (Sandbox Code Playgroud)
我想出了这个解决方案:
var b = [];
for (j in kpis) {
for (i in a) {
if (a[i].id == kpis[j]) {
b.push(a[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
来自R,这看起来有点复杂,有没有办法用filter原型做到这一点?像这样,但要与一个字符串数组进行比较而不是单个字符串:
var b = a.filter( function(item){return (item.id == "kpi03");} );
Run Code Online (Sandbox Code Playgroud)
非常感谢!
Ale*_* T. 15
你可以在filter中使用indexOf,就像这样
var res = a.filter(function (el) {
return kpis.indexOf(el.id) >= 0;
});
Run Code Online (Sandbox Code Playgroud)
另一个不错的选择是使用.filter和 .includes:
var result = a.filter(item => kpis.includes(item.id))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13792 次 |
| 最近记录: |