过滤没有键的JavaScript数组

时间:2018-11-22 09:48:38

标签: javascript arrays filtering

我有一个二维数组:

array = [["car","dog","kenya"],["plane", "cat", "kenya"],["boat", "mouse", "england"]]

我想按国家/地区过滤,然后将与该国家“关联”的所有动物归还给另一个数组。

例如,肯尼亚进行的过滤将狗和猫放入另一个数组中。

希望如此。非常感激任何的帮助。谢谢。

5 个答案:

答案 0 :(得分:0)

假设您的动物始终处于索引1,则可以使用Array.prototype.filter() Array.prototype.map()来实现这一目标。

.filter()将“过滤”您的2d数组,使其仅包括其中包含国家/地区的数组,然后.map()通过将所有内部数组“替换”为2d数组,将该2d数组转换为1d数组。是动物(即索引1)。

请参见下面的工作示例:

const array = [["car","dog","kenya"],["plane", "cat", "kenya"],["boat", "mouse", "england"]],
      filterBy = "kenya", // The contry to filter by
      
      animals = array.filter(arr => arr[2] == filterBy).map(elem => elem[1]);

console.log(animals);

答案 1 :(得分:0)

您可以创建一个通用函数,该函数获取要过滤的类型(国家/地区为2)和要匹配的值(例如“肯尼亚”)的索引

array = [["car","dog","kenya"],["plane", "cat", "kenya"],["boat", "mouse", "england"]]
const FILTER_TYPE = { vehicle: 0, animal: 1, country: 2 }

const filter_by = (index, value) => (array.filter(item => (item[index] === value)).map(item => item[FILTER_TYPE.animal]))

console.log(filter_by(FILTER_TYPE.country, 'kenya'))

答案 2 :(得分:0)

您可以过滤数组,然后映射所需的项目。

此解决方案利用了destructuring assignment的优势,其中采用了一个数组,并且这些项都获得了一个名称。

var array = [["car", "dog", "kenya"], ["plane", "cat", "kenya"], ["boat", "mouse", "england"]],
    result = array
        .filter(([,, country]) => country === "kenya")
        .map(([, animal]) => animal)

console.log(result);

答案 3 :(得分:0)

查看您提供的代码,并考虑该国家/地区始终处于索引2中,而动物始终处于索引1中,则可以使用forEach()循环来获取该特定国家/地区的动物。

var array = [
  ["car", "dog", "kenya"],
  ["plane", "cat", "kenya"],
  ["boat", "mouse", "england"]
];
var country = 'kenya';
var animals = [];
array.forEach((item) => {
  if (item[2] === country) {
    animals.push(item[1]);;
  }
});
console.log(animals);

答案 4 :(得分:0)

在国家肯尼亚中,您可以找到该国家的相关动物。 让我知道,是否需要任何更改。

array = [["car","dog","kenya"],["plane", "cat", "kenya"],["boat", "mouse", "england"]]
    array.map((data,i) => {
        data.map((dataKey)=>{
        if(dataKey === "kenya"){
        console.log(array[i])
        }
    })
})