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
相关产品推荐
相关产品推荐

