过滤数组中的数组以获取嵌套数组中的值

时间:2019-05-03 15:06:21

标签: javascript arrays filter

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

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

我想为某些值(例如43801309)过滤那些嵌套数组的[index = 1] 如果只是该数组中的单个值

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

就可以了,但是如果我尝试

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

它不起作用

4 个答案:

答案 0 :(得分:2)

如果[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);

答案 1 :(得分:1)

您可以自定义过滤条件

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

答案 2 :(得分:0)

array.filter(function(arr) {
    return arr[1] === value;
}

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

答案 3 :(得分:0)

您不想过滤两次。您真正想要实现的是匹配特定条件的过滤器行,在您的情况下,条件是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);