将数组传递给JavaScript过滤器函数

时间:2018-09-19 10:06:57

标签: javascript arrays filter

假设我有一个这样的对象数组:

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"
 }
]

5 个答案:

答案 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 
    }, [])
}