如何过滤array,筛选出包含指定drive_slots属性值的对象元素?
数组对象指定值过滤实现方案
问题分析
- 原代码存在2个核心逻辑错误:
- 直接用
===判断数组和字符串是否相等,逻辑不成立,需要判断drive.drive_slots数组是否包含目标值 ('82:17','82:4')属于逗号表达式,最终只会返回最后一个值82:4,无法同时匹配多个目标值
- 直接用
- 额外冗余问题:用
map遍历数组做push操作属于不必要的写法,map是用于生成新数组的方法,此处不需要额外转存数组,可以直接对原数据做过滤
正确实现代码
// 可自定义要匹配的目标槽位列表 const targetSlots = ['82:17', '82:4'] let drive_filter = [] if (props.driveData?.length) { drive_filter = props.driveData.filter(drive => { // 判断当前对象的drive_slots是否包含任意一个目标值 return targetSlots.some(slot => drive.drive_slots?.includes(slot)) }) } console.log("drive_filter>>>", drive_filter);
功能说明
- 上述代码执行后,
drive_filter会返回所有drive_slots中包含任意目标值的对象,匹配你给出的示例数组的话,结果会包含id为577569和577543的两个对象 - 如果需要严格匹配所有指定值都存在才返回,把代码里的
some改成every即可 - 可选链
?.用于空值防护,避免属性/数组不存在时抛出异常
内容的提问来源于stack exchange,提问作者aliFront
相关产品推荐
相关产品推荐

