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

krs*_*adi 17 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"
}
]
Run Code Online (Sandbox Code Playgroud)

现在我有一系列的empid [1,4,5].

所以现在我需要过滤包含我第二个中所有键的第一个数组.

输出:

records:[{
    "empid":1,
    "fname": "X",
    "lname": "Y"
},
{
    "empid":4,
    "fname": "C",
    "lname": "Y"
},
{
    "empid":5,
    "fname": "C",
    "lname": "Y"
}
]
Run Code Online (Sandbox Code Playgroud)

我可以使用forEach循环进行此操作,angular但因为我的模型对象中有超过100条记录.我需要一个关于如何更好地处理这个问题的建议.

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

您的帮助得到了认可.

谢谢.

Raj*_*amy 34

你可以用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 };
Run Code Online (Sandbox Code Playgroud)

如果callBack返回一个true值,则itm传递给特定的callBack将被过滤掉.你可以在这里阅读更多相关信息.


Tim*_*ass 11

在2019年使用ES6:

const ids = [1, 4, 5],
  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"
    }]
  };


data.records = data.records.filter( i => ids.includes( i.empid ) );

console.info( data );
Run Code Online (Sandbox Code Playgroud)

  • 对于 JavaScript 初学者来说,一些解释会极大地增加你的答案的价值。;) (2认同)