JavaScript - Фильтрация массива из 2D массива - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь добавить условие в свой 2D-массив, которое я получаю после вызова API. Возвращаемые данные входят в тройку лучших по штату. Так, например, есть 3 значения, которые читаются как «Калифорния», а второй индекс является рангом. Я пытаюсь применить условие для фильтрации любого состояния, которое не возвращается, появляется 3 раза, например: Если (имя состояния) не имеет 1, 2, 3, не возвращается. Моя проблема в том, что я не знаю, как успешно применить этот logi c.

Я попытался пройти через массив и поставить условие, если имя состояния не повторяется 3 раза, удалите из массива .

Мой ожидаемый результат будет следующим:

const data = [ [ "California", 1 , 23432], ["Califonria", 2, 22132], ["California", 3, 49343], ["New York", 1, 3231], ["New York", 2 , 3023], ["New York", 3, 2932]

вот фрагмент, который я пробовал:

const data = [ [ "California", 1 , 23432], ["Califonria", 2, 22132], ["California", 3, 49343], ["New York", 1, 3231], ["New York", 2 , 3023], ["New York", 3, 2932], ["Georgia", 1, 3423]]


for (let i = 0; data.length > i; i++) {
if (data[0].length < 3) {
     data.splice(i,1)
}
}

console.log(data)

1 Ответ

3 голосов
/ 01 августа 2020

Вы можете подсчитать, сколько раз каждое имя состояния встречается в исходном массиве, а затем отфильтровать массив на основе счетчика, равного 3 для этого имени состояния:

const data = [
  ["California", 1, 23432],
  ["California", 2, 22132],
  ["California", 3, 49343],
  ["New York", 1, 3231],
  ["New York", 2, 3023],
  ["New York", 3, 2932],
  ["Georgia", 1, 3423]
];

const counts = data.reduce((c, v) => {
  c[v[0]] = (c[v[0]] || 0) + 1;
  return c;
}, {});
const result = data.filter(v => counts[v[0]] == 3);
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...