假设每个员工都是
的对象emp1.age=30
emp1.name="Hang"
emp2.age=40
emp2.name="Dang"
emp3.age=50
emp3.name="Bang"
将其存储在Array中。
var orginialArray=[emp1,emp2,emp3];
我想用另一个字符串数组过滤或拼接数组。
某处我准备了一系列与originalArray
进行比较的名称,然后从originalArray
var removeElements=["Hang","Dang"]
我尝试了filter
,但最终在回调中发送了一个字符串,我无法使其正常工作
function filterItems(query) {
return orginialArray.filter((el) =>
el.toLowerCase().indexOf(query.toLowerCase()) > -1
)
}
console.log(filterItems(removeElements)); //i know this is wrong
目标是过滤原始数组,并且只有名称不在remove元素数组中的员工。
我也试过拼接,但也没有运气。
答案 0 :(得分: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 );

答案 1 :(得分:3)
你很亲密。由于query
是一个名称数组,您需要检查当前员工的姓名是否在该数组中 - 如果是,请将该员工从新列表中排除,如下所示:
var emp1 = {
age: 30,
name: "Hang"
};
var emp2 = {
age: 40,
name: "Dang"
};
var emp3 = {
age: 50,
name: "Bang"
};
var originalArray = [emp1, emp2, emp3];
var removeElements = ["hang", "bang"];
function filterItems(query) {
return originalArray.filter((employee) =>
query.indexOf(employee.name.toLowerCase()) === -1
)
}
console.log(filterItems(removeElements));
答案 2 :(得分:0)
这是一个完全ES6阵列方法的解决方案。你可以这样做:
filterItems(query){
let newArray = []
query.map( (qElem) => newArray.push(qElem.toLowerCase()) )
return originalArray.filter((el) =>
newArray.includes(el.toLowerCase())
)
}
我正在使用查询名称生成一个新数组,但是小写。然后返回一个新数组,其中所有元素都不满足newArray中包含的条件。 希望它有所帮助!