如何从 javascript 中的数组中过滤多个值

how to filter multiple values from an array in 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 和查理。有没有办法让它变得动态。如果是,请告诉我。提前致谢。

您可以使用 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)

可以将需要过滤的名字存入数组,然后判断数组中是否存在名字

例如

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)

您可以创建一个要过滤的姓名数组,然后:

如果你想坚持使用 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);