javascript - 如何使用对象过滤对象数组
问题描述
我想通过另一个数组的项过滤一个对象数组。这是我的物品清单:
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
}
})
})
我究竟做错了什么?有人可以帮助我吗?
解决方案
您正在以我将要说的相反方式进行操作。您需要检查 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()
您可以在此处阅读更多信息。
推荐阅读
- javascript - 直接 url 在 vuejs 中不起作用,但路由器推送有效
- c# - 从上一个提示中单击 PromptDialog.Choice
- symfony - Symfoyn 3.4:FOS 用户包:覆盖控制器
- c# - 按周对 DataTable 进行分组
- angular - 允许使用路由访问 Angular 5 应用程序
- php - 脚本 php artisan 优化处理使用 laravel 5.4 返回的 post-update-cmd 事件,错误代码为 1
- javascript - 加载所有以 main.*.css 和 main.*.js 开头的 css 和 Js 文件
- elasticsearch - 从每个唯一存储桶中查找前 5 个文档
- angular - 角度路由器未重定向到使用路径指定的组件
- python - 如何将列表写入 txt 文件,每个项目在一行中不带“\n”