Фильтр Array of Array для значений внутри вложенного массива - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь разобраться с этим, у меня есть массив с вложенными массивами, например,

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

, это не будет работать

Ответы [ 4 ]

2 голосов
/ 03 мая 2019

Если [индекс] всегда является вторым элементом массива, вы можете просто проверить, является ли значение индекса 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 голос
/ 03 мая 2019

Вы можете настроить условие фильтра

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);
0 голосов
/ 03 мая 2019

Вы не хотите фильтровать дважды. Чего вы действительно хотите добиться, так это фильтровать строки, соответствующие определенному условию, в вашем случае это условие 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);
0 голосов
/ 03 мая 2019
array.filter(function(arr) {
    return arr[1] === value;
}

Это должно решить вашу проблему.Похоже, вы не хотите фильтровать вложенный массив, а выбираете те, в которые входит значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...