Как я могу применить несколько фильтров и несколько значений в JS? - PullRequest
1 голос
/ 14 октября 2019

У меня есть 2 значения, я хочу отфильтровать эти значения в моих данных. Как я могу это сделать?

Я хочу отфильтровать идентификаторы 1 и 2.

    data: [
            {id: 1, name: "Carl", city: "New York"},
            {id: 2, name: "Anna", city: "New York"},
            {id: 3, name: "Carl", city: "Sydney"}
        ]

    filterValue: [1, 2]

Ответы [ 5 ]

0 голосов
/ 14 октября 2019

Создайте хэш-карту из data с ключом id.

let data = [
        {id: 1, name: "Carl", city: "New York"},
        {id: 2, name: "Anna", city: "New York"},
        {id: 3, name: "Carl", city: "Sydney"}
    ];
let map1 = new Map(data.map(e=>[e.id,e]));
let filterValue = [1, 2];
let output = filterValue.map(e=>map1.get(e));
console.log(output);
0 голосов
/ 14 октября 2019

Вы можете использовать эту служебную функцию, которая принимает массив значений для фильтрации и ключ объекта для фильтрации:

const data = [{ id: 1, name: 'Carl', city: 'New York' }, { id: 2, name: 'Anna', city: 'New York' }, { id: 3, name: 'Carl', city: 'Sydney' }]

const filterData = (d, f, k) => data.filter(o => f.includes(o[k]))

console.log(filterData(data, [1, 2], 'id'))
console.log(filterData(data, ['Carl'], 'name'))
0 голосов
/ 14 октября 2019

Вы можете использовать .filter () для Array:

var data = [{
    id: 1,
    name: "Carl",
    city: "New York"
  },
  {
    id: 2,
    name: "Anna",
    city: "New York"
  },
  {
    id: 3,
    name: "Carl",
    city: "Sydney"
  }
]

var filteredData = data.filter(function(data) {     
    return data.id == 1 || data.id == 2;
})
0 голосов
/ 14 октября 2019

Вы можете использовать .filter() с .includes(), чтобы проверить, есть ли у obj.filterValue текущие объекты id, если нет, вы можете сохранить массив, если он есть, он удалит его изновый массив:

const obj = {data:[{id:1,name:"Carl",city:"New York"},{id:2,name:"Anna",city:"New York"},{id:3,name:"Carl",city:"Sydney"}],filterValue:[1,2]};
const res = obj.data.filter(({id}) => !obj.filterValue.includes(id));

console.log(res);
0 голосов
/ 14 октября 2019

Используйте filter и indexOf для фильтрации значений в массиве с использованием другого массива

var data = [{
    id: 1,
    name: "Carl",
    city: "New York"
  },
  {
    id: 2,
    name: "Anna",
    city: "New York"
  },
  {
    id: 3,
    name: "Carl",
    city: "Sydney"
  }
]

var filterValue = ["Carl"];
console.log(data.filter(function(e) {
  return filterValue.indexOf(e.name) != -1
}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...