You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何用状态数组过滤对象数组获取目标记录?

多状态数组过滤对象数组的实现方法

原始数据与示例

待处理数据

let openstatus = ["Open","Created","Checked"]

let obj = [
  { id: 23434, Author: 'tester', status: 'Approval' }, 
  { id: 2578, Author: 'apitester', status: 'Open' }, 
  { id: 2847, Author: 'usertester', status: 'Created' },
  { id: 2847, Author: 'usertester', status: 'Draft' },
]

注:修正了原代码中Authore的拼写错误,同时将带前导零的id改为十进制数字(前导零会被JS解析为八进制,可能导致数值异常)。

单状态过滤示例

示例:单状态值过滤代码

let status = "Draft"
obj.filter((e1) => {
  return e1.status.includes(status)
});

执行上述代码后输出:

[{ id: 2847, Author: 'usertester', status: 'Draft' }]

问题

作为JavaScript新手,我想了解当状态值为多元素数组openstatus时,如何过滤obj数组,筛选出status属性属于openstatus的对象,求简单解决步骤。

解决方法

步骤1:核心思路

利用Array.prototype.includes()方法判断对象的status是否存在于目标状态数组openstatus中,配合filter()方法遍历并筛选符合条件的对象。

步骤2:编写过滤代码

// 筛选status属于openstatus的对象
let filteredResults = obj.filter(item => openstatus.includes(item.status));

步骤3:查看输出结果

执行上述代码后,会得到所有status匹配openstatus中元素的对象(Checked在原obj中无匹配项,因此不会被包含):

[
  { id: 2578, Author: 'apitester', status: 'Open' },
  { id: 2847, Author: 'usertester', status: 'Created' }
]

额外优化提示

如果需要处理大量数据,为了提升查找性能,可以把openstatus转为Set,因为Set.has()的查找效率比数组includes()更高:

let statusSet = new Set(openstatus);
let filteredResults = obj.filter(item => statusSet.has(item.status));

内容的提问来源于stack exchange,提问作者vijay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:25:25