如何对 javascript 中的对象数组使用过滤器

how to use filter on array of objects in javascript

我想在 javascript 中过滤我的结果。

const ids =["2", "3"];
const data = 
  [
    {"id":'1', 'name:'alex' , 'subject':'english' },
    {"id":'2', 'name:'alex' , 'subject':'english' },
    {"id":'3', 'name:'alex' , 'subject':'english' },
    {"id":'4', 'name:'alex' , 'subject':'english' },
  ]

我想过滤数据并删除在 ids 中找到的那些 ID。这是我到目前为止尝试过的

const NewData = ids.reduce(function (key, index) {
  return (data.filter(x => x.id !== key))
})

但是returns

[
  {"id":'1', 'name:'alex' , 'subject':'english' },
  {"id":'3', 'name:'alex' , 'subject':'english' },
  {"id":'4', 'name:'alex' , 'subject':'english' },
]

我想从 data 中删除 ID 2 & '3',但它只会删除 ID 2。希望您理解我的问题。

不需要使用reduce。一个简单的过滤器就可以了。

示例:

const ids = ["2", "3"];

const data = [
  { id: "1", name: "alex", subject: "english" },
  { id: "2", name: "alex", subject: "english" },
  { id: "3", name: "alex", subject: "english" },
  { id: "4", name: "alex", subject: "english" },
];

const new_data = data.filter((x) => ids.includes(x.id));
console.log(new_data);

如果原始数组中id的类型与数据中id的类型不同,可以使用.map(a=>parseInt(a))然后用.includes()

检查

const ids = ["2", "3"];

const data = [
  { id: 1, name: "alex", subject: "english" },
  { id: 2, name: "alex", subject: "english" },
  { id: 3, name: "alex", subject: "english" },
  { id: 4, name: "alex", subject: "english" },
];
const ids_int  = ids.map(a => parseInt(a))
const filtered = data.filter(x => !ids_int.includes(x.id))
console.log(filtered)