Javascript: 按字符串数组过滤对象数组
Javascript: filter array of objects by array of strings
我想知道是否有更优雅的方法来做到这一点。假设我有一个这样的对象数组:
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
}
]
现在我想在 id
属性 上过滤到 return 在另一个数组
中匹配的所有对象
var kpis = ["kpi03", "kpi02"];
我想到了这个解决方案:
var b = [];
for (j in kpis) {
for (i in a) {
if (a[i].id == kpis[j]) {
b.push(a[i]);
}
}
}
来自 R,这似乎有点复杂,有没有办法用 filter
原型来做到这一点?像这样,但要比较的是一组字符串而不是单个字符串:
var b = a.filter( function(item){return (item.id == "kpi03");} );
非常感谢!
你可以在过滤器中使用 indexOf,像这样
var res = a.filter(function (el) {
return kpis.indexOf(el.id) >= 0;
});
var b = a.filter(function(item){return kpids.indexOf(item.id) > -1 });
Array.indexOf
returns 在调用 indexOf
的数组中传递的参数的索引。 returns -1
如果没有我们要找的元素
因此,我们确保它的索引大于-1
另一个不错的选择是使用 .filter with .includes:
var result = a.filter(item => kpis.includes(item.id))
如果你想让它们按照字符串数组的顺序排列,那么
var result = [];
kpis.map((item) => {
const matchedObject = a.find(
(option) => option.id === item
);
result.push(matchedObject);
});
我想知道是否有更优雅的方法来做到这一点。假设我有一个这样的对象数组:
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
}
]
现在我想在 id
属性 上过滤到 return 在另一个数组
var kpis = ["kpi03", "kpi02"];
我想到了这个解决方案:
var b = [];
for (j in kpis) {
for (i in a) {
if (a[i].id == kpis[j]) {
b.push(a[i]);
}
}
}
来自 R,这似乎有点复杂,有没有办法用 filter
原型来做到这一点?像这样,但要比较的是一组字符串而不是单个字符串:
var b = a.filter( function(item){return (item.id == "kpi03");} );
非常感谢!
你可以在过滤器中使用 indexOf,像这样
var res = a.filter(function (el) {
return kpis.indexOf(el.id) >= 0;
});
var b = a.filter(function(item){return kpids.indexOf(item.id) > -1 });
Array.indexOf
returns 在调用 indexOf
的数组中传递的参数的索引。 returns -1
如果没有我们要找的元素
因此,我们确保它的索引大于-1
另一个不错的选择是使用 .filter with .includes:
var result = a.filter(item => kpis.includes(item.id))
如果你想让它们按照字符串数组的顺序排列,那么
var result = [];
kpis.map((item) => {
const matchedObject = a.find(
(option) => option.id === item
);
result.push(matchedObject);
});