Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript filter check for multiple values?

I am wondering how I can return multiple values from an array like this:

var countries = [
    { key: "Spain", doc_count: 1378 },
    { key: "Greece", doc_count: 1259 }
];

This is what I have set up so far and it works fine for returning a single value. I am wondering how I could pass an array of countries though instead of looking for a single country.

var countriesFound = countries.filter(function(country) {
    return country.key === 'Spain';
});

On that note I would also like to add the found object to the front of the array so I could have a copy of it inside my countries array.

Using this results in some unexpected results because I end up with an array as my first item in the countries array and my object that I want is stored withint that array.

countries.unshift(countriesFound);

Results in (at least I think it looks like this typed out):

var countries = [
    [{ key: "Spain", doc_count: 1378 }],
    { key: "Spain", doc_count: 1378 },
    { key: "Greece", doc_count: 1259 }
];
like image 849
Stephan-v Avatar asked Jun 14 '16 09:06

Stephan-v


2 Answers

Change your filter to :

var countriesFound = countries.filter(function(country) {
    return ["Spain","Greece"].indexOf(country.key) != -1
});

Where ["Spain","Greece"] is your list of valid countries that you want to filter by. The value returned form the filter function applied to the array determines whether the element is filtered in or out. indexOf finds the position in the given array of the give country.key

As per the add the filtered array to the beginning of the other one you are correct, doing countries.unshift(countriesFound) after the previous code will achieve that.

like image 157
Juan Cortés Avatar answered Nov 11 '22 15:11

Juan Cortés


The same answer as @Juan Corés, but with arrow function expression:

const countriesFound = countries.filter(country => 
    ["Spain","Greece"].indexOf(country.key) != -1
);
like image 9
Fellow Stranger Avatar answered Nov 11 '22 14:11

Fellow Stranger