开发者问题收集

Javascript 过滤器检查多个值吗?

2016-06-14
6718

我想知道如何从这样的数组中返回多个值:

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

这是我目前所设置的,它可以很好地返回单个值。我想知道如何传递一个国家数组,而不是寻找单个国家。

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

关于这一点,我还想将找到的对象添加到数组的前面,这样我就可以在我的国家数组中拥有它的副本。

使用这种方法会产生一些意想不到的结果,因为我最终得到一个数组作为国家数组中的第一个项目,而我想要的对象存储在该数组中。

countries.unshift(countriesFound);

结果(至少我认为它看起来像这样输入的):

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

将过滤器更改为:

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

其中 ["Spain","Greece"] 是您想要过滤的有效国家/地区列表。应用于数组的过滤函数返回的值决定元素是否被过滤。 indexOf 查找给定数组中给定 country.key 的位置

根据 将过滤后的数组添加到另一个数组的开头 ,您是正确的,在前面的代码之后执行 countries.unshift(countriesFound) 将实现这一点。

Juan Cortés
2016-06-14

与@Juan Corés 的答案相同,但使用箭头函数表达式:

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