Stephan-v
Stephan-v

Reputation: 20309

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

Upvotes: 9

Views: 6737

Answers (2)

Fellow Stranger
Fellow Stranger

Reputation: 34023

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

const countriesFound = countries.filter(country => 
    ["Spain","Greece"].indexOf(country.key) != -1
);

Upvotes: 9

Juan Cortés
Juan Cortés

Reputation: 21082

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.

Upvotes: 16

Related Questions