如何在JavaScript中从数组中过滤多个值

3
我有一个包含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(||)条件,并且这些名称的数量可能会改变,比如有时我只想要名为Bobby的员工,其他时候我想要Bobby、Indi和Charlie。是否有一种方法可以使其动态化?如果可以,请告诉我。谢谢。


这个回答解决了你的问题吗?JavaScript过滤器检查多个值? - Lauren Yim
3个回答

9
您可以将需要过滤的名称存储在一个数组中,然后检查该名称是否存在于数组中。
例如:

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)


嗨@hussain.codes,感谢您的快速回复。但是在IE 11中它给我语法错误。IE 11是否支持filter和includes函数?您能帮我解决这个问题吗? - kavya
IE 11不支持箭头函数,我已经更新了答案。 - Gulam Hussain
嗨@hussain.codes,我尝试了上面的代码,但它显示对象不支持属性或方法'includes'错误。如果有任何解决方法,请帮忙提供一下。谢谢。 - kavya

1
你可以使用 Array.includes() 来过滤以下项目:

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 keywords = ['bobby', 'indi'] // You can add keywords to be filtered to this array to make it dynamic
const filtered = arr.filter(item => keywords.includes(item.name))

console.log(filtered)


1
你可以创建一个要过滤的名称数组,然后:

如果你想坚持使用 ES6 之前的编码:

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

var names = ['bobby', 'indi'];

var filteredArray = [];

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

console.log(filteredArray);

或者,如果你愿意切换到ES6+编码:

const 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 filteredArray = arr.filter(item => names.includes(item.name));

console.log(filteredArray);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接