javascript:使用另一个数组作为过滤器过滤对象数组

Nev*_*161 1 javascript arrays filter ecmascript-6

假设每个员工都是一个拥有的对象

emp1.age=30
emp1.name="Hang"
emp2.age=40
emp2.name="Dang"
emp3.age=50
emp3.name="Bang"
Run Code Online (Sandbox Code Playgroud)

将其存储在Array中.

var orginialArray=[emp1,emp2,emp3];
Run Code Online (Sandbox Code Playgroud)

我想用另一个字符串数组过滤或拼接数组.

在某个地方,我正在准备一系列名称进行比较,originalArray然后从中删除不匹配的员工originalArray

var removeElements=["Hang","Dang"]
Run Code Online (Sandbox Code Playgroud)

我试过filter但它最终在回调中发送一个字符串,我无法使它工作

function filterItems(query) {
  return orginialArray.filter((el) =>
    el.toLowerCase().indexOf(query.toLowerCase()) > -1
  )
}
console.log(filterItems(removeElements)); //i know this is wrong
Run Code Online (Sandbox Code Playgroud)

目标是过滤原始数组,只有名称不在remove元素数组中的员工.

我也试过拼接,但也没有运气.

Moh*_*waj 5

您可以使用Array.filter()方法(您已经在使用)并且仅当removeNames数组中不存在当前员工名称时才返回true(您可以使用Array.indexOf()进行检查):

var employees = [
  {"name": "abc", "age":"34"},
  {"name": "pqr", "age":"34"},
  {"name": "xyz", "age":"34"},
  {"name": "xxx", "age":"34"},
];

var removeNames = ["xxx"];

// if required, make all removeNames elements lowerCase first
// removeNames = removeNames.map(function(name){
  // return name.toLowerCase();
// });//map()


var filteredEmployees = employees.filter(function(emp){
  return removeNames.indexOf(emp.name.toLowerCase()) === -1;
});//filter

console.log( filteredEmployees );
Run Code Online (Sandbox Code Playgroud)