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

标签 javascript angularjs angular-filters

我有一个数组模型如下:

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/

相关文章:

javascript - AngularJS 过滤另一个数组中的值

angularjs - 通过AngularJS中的多个复选框进行过滤

带条件的 AngularJS 日期过滤器

javascript - 它如何让单选按钮传递隐藏在 url 中的数据?

javascript - 使用 HTML5 数据属性的 MooTools 事件委托(delegate)

javascript - 我在 Angular JS 中调用数据抛出 json 但没有收到数据,为什么?

javascript - Fabric Js - 是否可以将图像对象自动缩放到 Canvas ?

php - 字符串的正则表达式,必须至少包含 14 个字符,其中至少 2 个是数字,至少 6 个是字母

javascript - 如何从 JSON 中的指定键获取值

javascript - Webpack 无法加载json 文件,如何定位本地json 文件并使用http.get 和AngularJS 加载该文件