首页 > 解决方案 > 如何使用对象过滤对象数组

问题描述

我想通过另一个数组的项过滤一个对象数组。这是我的物品清单:

const list = ["first", "second", "third"]

这个数组可以是空的,有一个、两个或三个元素......例如:

const list = []
const list = ["first"]
let list = ["first", "third"]

所以,我需要使用 my按状态list过滤myArr2

const myArr2 = [
  {
    id: "1",
    language: "portuguese",
    status: "first"    
  },
  {
    id: "2",
    language: "portuguese",
    status: "first"    
  },
  {
    id: "3",
    language: "portuguese",
    status: "second"    
  },
  {
    id: "4",
    language: "portuguese",
    status: "third"    
  },      
  {
    id: "5",
    language: "portuguese",
    status: "second"    
  },      
]

如果我list是:

const list = [ "first", "third" ]

输出必须是:

const myArr2 = [
  {
    id: "1",
    language: "portuguese",
    status: "first"    
  },
  {
    id: "2",
    language: "portuguese",
    status: "first"    
  },
  {
    id: "4",
    language: "portuguese",
    status: "third"    
  },      
]

如果我list是:

const list = [ "first" ]

输出必须是:

const myArr2 = [
  {
    id: "1"
    language: "portuguese"
    status: "first"    
  },
  {
    id: "2"
    language: "portuguese"
    status: "first"    
  }  
}

等等...

我制作了这段代码,但无法正常工作:

Object.entries(list).forEach(status => {
  myArr2.filter(item => {
    if(item.status === status){
      return item
    }
  })
})

我究竟做错了什么?有人可以帮助我吗?

标签: javascriptarraysobject

解决方案


您正在以我将要说的相反方式进行操作。您需要检查 myArr2 中的每个项目,该项目是否具有列表数组中存在的状态。你可以这样做 -

正确的代码 -

let myArr2 = [
  {
    id: "1",
    language: "portuguese",
    status: "first"    
  },
  {
    id: "2",
    language: "portuguese",
    status: "first"    
  },
  {
    id: "3",
    language: "portuguese",
    status: "second"    
  },
  {
    id: "4",
    language: "portuguese",
    status: "third"    
  },      
  {
    id: "5",
    language: "portuguese",
    status: "second"    
  },      
];
const list = [ "first", "third" ]

myArr2 = myArr2.filter(item => list.includes(item.status))
console.log(myArr2)


你的方法有误

Object.entries(list).forEach(status => {
  myArr2.filter(item => {
    if(item.status === status){
      return item
    }
  })
})

在上述方法中,您将遍历列表中的第一个元素(即first)。因此,它将过滤掉所有myArr2不具有第一状态的项目。

在下一次迭代中,您将检查列表中的第二个元素(即second)。因此,现在它将再次进一步过滤掉所有myArr2不具有状态的项目second。由于没有元素同时具有 first 和 second 的状态,因此您的代码可能会将结果数组作为空数组返回。


注意:您需要将返回的新数组分配myArr2给某个变量。该filter方法不会就地过滤掉元素。因此,由于您还没有这样做,如果您尝试通过控制台日志记录检查它,您的代码可能会为您提供原始数组本身。

filter() 您可以在此处阅读更多信息。


推荐阅读