首页 > 解决方案 > 如何在javascript中过滤数组中的多个值

问题描述

我有一个 json 元素数组。我想根据特定值过滤数组。下面是数组。

var arr = [
{name: bobby, id: 1, age: 23},
{name: charls, id: 2, age: 28},
{name: indi, id: 3, age: 23},
{name: charlie, id: 4, age: 25}]

从上面的数组中,我只想过滤名称为 bobby && indi 的员工。我试过下面的代码。

var filteredArray;
for (var i =0 ; i < arr.length; i++){
    if(arr[i].name === 'bobby' || arr[i].name === 'indi'){
        filteredArray.push(arr[i]);
    }
}

但是通过上面的代码,我需要多次提及 OR(||) 条件,并且这些名称的数量可能会发生变化,例如 1 次我只想要有 Bobby 名字的员工,而其他时候我想要 Bobby、Indi 和 Charlie。有没有办法让它动态化。如果是,请告诉我。提前致谢。

标签: javascriptarraysfiltering

解决方案


您可以将需要过滤的名称存储在数组中,然后检查名称是否存在于数组中

例如。

var arr = [
    {name: "bobby", id: 1, age: 23},
    {name: "charls", id: 2, age: 28},
    {name: "indi", id: 3, age: 23},
    {name: "charlie", id: 4, age: 25}
]
const names = ["bobby", "indi"];

const filtered = arr.filter((item)=>{
  return names.includes(item.name)
});

console.log(filtered)

对于较旧的(例如 IE11)浏览器 -

var arr = [
    {name: "bobby", id: 1, age: 23},
    {name: "charls", id: 2, age: 28},
    {name: "indi", id: 3, age: 23},
    {name: "charlie", id: 4, age: 25}
]
const names = ["bobby", "indi"];

const filtered = [];

for(var i =0; i<arr.length - 1; i++){
  if(names.indexOf(arr[i].name) > -1){
      filtered.push(arr[i])
  }
}

console.log(filtered)


推荐阅读