假设我有一个这样的对象数组:
someObj: [
{
name: "Obj1",
type: "a"
},
{
name: "Obj2",
type: "b"
},
{
name: "Obj3",
type: "c"
}
]
现在,我有一个函数,如果传递的参数具有相同的someObj
属性,则该函数应该从type
数组返回对象数组。关键是传递的参数是一个数组,我不确定如何进行比较。
function filter(types) {
var filtered = someObj.filter(function(item) {
return item.type == ???
});
return filtered;
}
filter(["a", "c"]);
我如何比较传递给item.type的array参数中的每个项目,以便如果它们相等,则filter函数将向我返回一个数组,如下所示:
[
{
name: "Obj1",
type: "a"
},
{
name: "Obj3",
type: "c"
}
]
答案 0 :(得分:6)
您可以搜索类型。
带有Array#indexOf
的ES5
return types.indexOf(item.type) !== -1;
带有Array#includes
的ES6
return types.includes(item.type);
答案 1 :(得分:3)
您可以使用Array#includes()
来检查类型:
let someObj = [
{name: "Obj1",type: "a"},
{name: "Obj2",type: "b"},
{name: "Obj3",type: "c"}
]
function filter(types) {
return someObj.filter(function(item) {
return types.includes(item.type)
});
}
console.log(filter(["a", "c"]));
答案 2 :(得分:0)
或者是一种wind回曲折的老式方式:
var someObj = [
{
name: "Obj1",
type: "a"
},
{
name: "Obj2",
type: "b"
},
{
name: "Obj3",
type: "c"
}
];
function filter(types) {
var filtered = someObj.filter(function(item) {
if ( types.indexOf(item.type) >= 0 )
{
return item;
}
});
return filtered;
}
var x = filter(["a", "c"]);
console.log(x);
答案 3 :(得分:0)
如果可以使用ES6语法,则可以使用以下内容:
var someObj = [
{
name: "Obj1",
type: "a"
},
{
name: "Obj2",
type: "b"
},
{
name: "Obj3",
type: "c"
}
]
function filter(types){
return someObj.filter(obj => types.includes(obj.type))
}
console.log(filter(["a", "c"]))
答案 4 :(得分:-1)
您可以在此处使用reduce函数:
function filter(someObj, types) {
return someObj.reduce((acc, obj) => {
return types.includes(obj.type)? [...acc, obj] : acc
}, [])
}