如何在JS中应用多个过滤器和多个值?

时间:2019-10-14 10:16:33

标签: javascript arrays filter

我有2个值,我想过滤数据中的那些值。我该怎么办?

我要过滤ID 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 :(得分:0)

您可以将.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);

答案 1 :(得分:0)

您可以使用此实用程序功能,该功能使用要过滤的值的数组和要过滤的对象的键:

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

答案 2 :(得分:0)

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

答案 3 :(得分:-2)

使用 interface Option { title: string; isSelected?: boolean; } function myFunc(options: Option[]): void {} const options: Option[] = [{title: 'Male', isSelected: true}, {title: 'Female'}, {title: 'Other'}]; const options2 = {...options}; myFunc(options); myFunc(options2); // why isn't this an error ? filter来过滤另一个数组中的值

indexOf

答案 4 :(得分:-2)

您可以在Array上使用.filter():

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