【问题标题】:Filter JavaScript array without keys过滤没有键的 JavaScript 数组
【发布时间】:2021-01-25 18:17:01
【问题描述】:

我有一个二维数组:

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

我想按国家过滤并在另一个数组中返回与该国家“相关”的所有动物。

例如,Kenya 的过滤将 dog 和 cat 放入另一个数组中。

希望这是有道理的。非常感激任何的帮助。谢谢。

【问题讨论】:

  • 你有没有尝试过?请添加您的代码。
  • 数组有键:我们通常称它们为索引。在您的示例中,该国家/地区似乎始终位于索引 2。

标签: javascript arrays filtering


【解决方案1】:

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

.filter() 将“过滤”您的二维数组以仅包含包含国家/地区的数组,然后.map() 将通过将所有内部数组“替换”为动物来将此二维数组转换为一维数组(即索引1)。

请参阅下面的工作示例:

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

console.log(animals);

【讨论】:

    【解决方案2】:

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

    此解决方案利用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】:

      查看您提供的代码并考虑到该国家/地区始终位于 index-2 中,而动物位于 index-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】:

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

        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'))

        【讨论】:

          【解决方案5】:

          肯尼亚国家,您可以找到该国家的相关动物。 如果需要任何更改,请告诉我。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-09-24
            • 1970-01-01
            • 1970-01-01
            • 2022-01-07
            • 2022-01-23
            • 2019-12-29
            • 2021-04-21
            相关资源
            最近更新 更多