фильтрация таблицы javascript на основе ее значений

#javascript #arrays #sorting

#javascript #массивы #сортировка

Вопрос:

Моя таблица / массив создана на Javascript и не жестко закодирована в HTML.

Я пытаюсь отфильтровать и вернуть таблицу на основе любого, кто посетил Великобританию.

Я хочу разместить функцию с параметрами (кандидаты, страны).

 var people = [
      { name: "Matt", countries: ["UK", "USA", "Russia"] },
      { name: "Simon", countries: ["Canada", "China"] },
      { name: "Ben", countries: ["UK", "India"] },
      { name: "Katie", countries: ["UK", "China"] },
      { name: "Omar", countries: ["Canada", "China"] },
      { name: "Simon", countries: ["India", "China", "USA"] },
    ];
  

Я пытался

 people.filter(person=>person.countries.includes('UK'))
  

Однако таблица не является динамической и не изменяется, чтобы отразить это на моей веб-странице, если я использую этот код, вместо этого он просто возвращает исходный массив ‘people’. Почему этот подход не работает?

Комментарии:

1. people.filter(person=>person.countries.includes('UK'))

2. «Я пытаюсь фильтровать» … покажите нам, что вы на самом деле пробовали. Stackoverflow — это не бесплатный сервис для написания кода. Цель состоит в том, чтобы вы показали свои попытки решить проблемы самостоятельно, а другие помогали, когда код работает не так, как ожидалось

3. Это работает — однако, когда я console.log (people) после этого кода, он по-прежнему возвращает исходный массив вместо нового массива, который должен включать только тех людей, которые были в Великобритании

4. filter возвращает новый массив, он не изменяет исходный. Попробуйте people = people.filter(…) .

Ответ №1:

Я думаю, это то, что вы ищете:

 const people = [
  { name: "Matt", countries: ["UK", "USA", "Russia"] },
  { name: "Simon", countries: ["Canada", "China"] },
  { name: "Ben", countries: ["UK", "India"] },
  { name: "Katie", countries: ["UK", "China"] },
  { name: "Omar", countries: ["Canada", "China"] },
  { name: "Simon", countries: ["India", "China", "USA"] },
];

const filterCandidates = (candidates, country) =>
  candidates.filter(({ countries }) =>  countries.includes(country));
  

Результат:

[{«name»:»Matt»,»countries»:[«UK»,»USA»,»Russia»]},{«name»:»Ben»,»countries»:[«UK»,»India»]},{«name»:»Katie»,»countries»:[«UK»,»China»]}]

https://es6console.com/jtm4kvvn/