一尘不染

对象键值在数组中时如何过滤数组

angularjs

我有一个数组模型如下:

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"
}
]

我可以使用forEach循环进行此操作,angular但是由于我的模型对象中有100多个记录。我需要如何更好地处理此问题的建议。

我正在考虑创建一个自定义过滤器,但是您对此有何看法(如果可以,请提供示例代码来实现此目的)。

感谢您的帮助。

谢谢。


阅读 337

收藏
2020-07-04

共1个答案

一尘不染

你可以做到这一点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将被过滤掉。您可以在这里了解更多信息。

2020-07-04