我有一个数组模型如下:
records:[{
"empid":1,
"fname": "X",
"lname": "Y"
},
{
"empid":2,
"fname": "A",
"lname": "Y"
},
{
"empid":3,
"fname": "B",
"lname": "Y"
},
{
"empid":4,
"fname": "C",
"lname": "Y"
},
{
"empid":5,
"fname": "C",
"lname": "Y"
}
]
现在我有一组 empid 的 [1,4,5]
。
所以现在我需要过滤第一个数组,它包含第二个数组中的所有键。
输出:
records:[{
"empid":1,
"fname": "X",
"lname": "Y"
},
{
"empid":4,
"fname": "C",
"lname": "Y"
},
{
"empid":5,
"fname": "C",
"lname": "Y"
}
]
我可以在 angular
中使用 forEach
循环来执行此操作,但因为我的模型对象中有超过 100 条记录。我需要有关如何以更好的方式处理此问题的建议。
我正在考虑创建自定义过滤器,但您对此有何看法。(如果是,请提供实现此目的的示例代码)。
最佳答案
你可以用 Array.prototype.filter()
来实现,
var data = { records : [{ "empid": 1, "fname": "X", "lname": "Y" }, { "empid": 2, "fname": "A", "lname": "Y" }, { "empid": 3, "fname": "B", "lname": "Y" }, { "empid": 4, "fname": "C", "lname": "Y" }, { "empid": 5, "fname": "C", "lname": "Y" }] }
var empIds = [1,4,5]
var filteredArray = data.records.filter(function(itm){
return empIds.indexOf(itm.empid) > -1;
});
filteredArray = { records : filteredArray };
如果 callBack
返回一个 true
值,则 itm
传递给那个特定的 callBack
将被过滤掉。您可以阅读更多相关信息 here .
关于javascript - 当对象键值在数组中时如何过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35817565/