【问题标题】:Filter Array of Array for values inside nested array为嵌套数组中的值过滤数组数组
【发布时间】:2019-05-03 15:06:21
【问题描述】:

我正在努力解决这个问题,我有一个带有嵌套数组的数组

var array = [
  [12, 43801309, "21.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
  [13, 43801308, "22.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
  [34, 43801307, "23.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
  [234, 43801308, "24.10.2018 00:00:00", 0.00089, 0.00055, 0.0004]
]

我想过滤这些嵌套数组的 [index = 1] 以获得某些值,例如 43801309 如果它只是该数组中的单个值

array.filter(function(val) { 
    return val === lookupVal;
});

会很好,但如果我尝试

array.filter(function(arr) {
    return arr.filter(function(val) {
        return val === lookupVal;
    });
});

没用

【问题讨论】:

  • array.filter(val => val[1] === lookupVal);?.. 数组查找值是否总是内部数组的第二个元素?
  • 是的,总是第二个值
  • arr.filter 返回一个数组,在 JavaScript 中总是true。所以它将被保存在初始(外部)数组中。即使是空的也是如此。

标签: javascript arrays filter


【解决方案1】:

如果 [index] 始终是数组的第二个元素,您可以简单地检查索引 1 处的值是否是所需的索引。

var array = [
  [12, 43801309, "21.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
  [13, 43801308, "22.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
  [34, 43801307, "23.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
  [234, 43801308, "24.10.2018 00:00:00", 0.00089, 0.00055, 0.0004]
];

var targetIndex = 43801308;

var filtered = array.filter(val => val[1] === targetIndex);

console.log(filtered);

【讨论】:

    【解决方案2】:

    您可以自定义过滤条件

    if(c.indexOf(43801308) > -1如果没有检查索引

    if(c[1] == 43801308) 如果检查索引 1

    let data = [
      [12, 43801309, "21.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
      [13, 43801308, "22.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
      [34, 43801307, "23.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
      [234, 43801308, "24.10.2018 00:00:00", 0.00089, 0.00055, 0.0004]
    ];
    
    let result = data.filter(c=> { if(c.indexOf(43801308) > -1) return c;});
    console.log(result);
    

    let data = [
      [12, 43801309, "21.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
      [13, 43801308, "22.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
      [34, 43801307, "23.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
      [234, 43801308, "24.10.2018 00:00:00", 0.00089, 0.00055, 0.0004]
    ];
    
    let result = data.filter(c=> { if(c.indexOf(43801308) > -1) return c;});
    
    //if only need index 1
    result = data.filter(c=> { if(c[1] == 43801308) return c;});
    
    console.log(result);

    【讨论】:

      【解决方案3】:
      array.filter(function(arr) {
          return arr[1] === value;
      }
      

      这应该可以解决您的问题。您似乎不想过滤嵌套数组,而是选择包含值的数组。

      【讨论】:

        【解决方案4】:

        您不想过滤两次。您真正想要实现的是过滤符合特定条件的行,在您的情况下,条件是row[1] === lookupVal

        const array = [
          [12, 43801309, "21.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
          [13, 43801308, "22.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
          [34, 43801307, "23.10.2018 00:00:00", 0.00089, 0.00055, 0.0004],
          [234, 43801308, "24.10.2018 00:00:00", 0.00089, 0.00055, 0.0004]
        ];
        
        const lookupVal = 43801308;
        const filterRows = array.filter(row => row[1] === lookupVal);
        
        console.log(filterRows);

        【讨论】:

          猜你喜欢
          • 2018-11-06
          • 1970-01-01
          • 2022-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多