Javascript:按字符串数组过滤对象数组
我想知道是否有更优雅的方式来做这件事。假设我有这样一个对象数组:Javascript:按字符串数组过滤对象数组,javascript,arrays,filter,Javascript,Arrays,Filter,我想知道是否有更优雅的方式来做这件事。假设我有这样一个对象数组: a = [ { "id": "kpi02", "value": 10 }, { "id": "kpi02", "value": 30 }, { "id": "kpi02", "value": 11 }, { "id": "kpi02", "value": 33 }, { "id": "kpi03", "value":
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
属性进行筛选,以返回另一个数组中具有匹配项的所有对象
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,这似乎有点复杂,有没有办法用过滤器原型来实现这一点?与此类似,但使用一个字符串数组进行比较,而不是使用单个字符串:
var b = a.filter( function(item){return (item.id == "kpi03");} );
非常感谢 您可以在过滤器中使用,如下所示
var res = a.filter(function (el) {
return kpis.indexOf(el.id) >= 0;
});
只要利用
Array.indexOf
返回在调用indexOf
的数组中传递的参数的索引。如果不存在我们要查找的元素,它将返回-1
因此,我们确保it索引大于-1另一个不错的替代方法是使用:
如果希望它们按字符串数组的顺序排列,则
var result = [];
kpis.map((item) => {
const matchedObject = a.find(
(option) => option.id === item
);
result.push(matchedObject);
});
感谢您的快速回答和示例!我知道一定有更优雅的解决方案:)
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);
});