Передача массива в функцию фильтра JavaScript - PullRequest
0 голосов
/ 19 сентября 2018

Допустим, у меня есть массив объектов, подобных этому:

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, чтобы, если ониравны, тогда функция фильтра вернет мне массив, например, так:

[
 {
    name: "Obj1",
    type: "a"
 },
 {
    name: "Obj3",
    type: "c"
 }
]

Ответы [ 5 ]

0 голосов
/ 19 сентября 2018

Вы можете использовать функцию уменьшения здесь:

function filter(someObj, types) {
    return someObj.reduce((acc, obj) => {
        return types.includes(obj.type)? [...acc, obj] : acc 
    }, [])
}
0 голосов
/ 19 сентября 2018

Если вы можете использовать синтаксис 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"]))
0 голосов
/ 19 сентября 2018

Вы можете использовать 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"]));
0 голосов
/ 19 сентября 2018

Или длинным, слегка старомодным способом:

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);
0 голосов
/ 19 сентября 2018

Вы можете искать тип.

ES5 с Array#indexOf

return types.indexOf(item.type) !== -1;

ES6 с Array#includes

return types.includes(item.type);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...