【问题标题】:how to filter multiple values from an array in javascript如何在javascript中过滤数组中的多个值
【发布时间】:2021-09-07 01:34:02
【问题描述】:

我有一个 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。有没有办法让它动态化。如果是,请告诉我。提前致谢。

【问题讨论】:

标签: javascript arrays filtering


【解决方案1】:

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

例如。

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 是否支持过滤器并包含函数。你能帮我解决这个问题吗?
  • IE 11 不支持箭头功能,我已经更新了答案。
  • 嗨@hussain.codes,我试过上面的代码,但它说对象不支持属性或方法“包含”错误。如果有任何解决方法或这个,你能帮我解决这个问题吗?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 2020-02-17
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      相关资源
      最近更新 更多