通过panel数组匹配筛选list嵌套数组时返回空或全量数组如何解决
问题根因
你原代码中的panel.includes(element.skill)逻辑是判断panel数组中是否直接包含element.skill这个数组对象,但panel里存储的都是字符串类型的技能标签,永远不可能匹配上数组类型的值,所以筛选条件永远返回false,才会出现第一种写法返回空数组、取反后返回全部元素的情况。
正确实现
你的需求是判断两个数组存在交集,只需要用Array.some()遍历元素的skill字段,判断是否有任意一个值存在于panel中即可:
// 筛选出skill和panel有交集的元素 const result = list.filter(element => element.skill.some(skillItem => panel.includes(skillItem)) )
如果需要反过来筛选没有交集的元素,只需要对上述条件取反即可:
// 筛选出skill和panel无交集的元素 const remove = list.filter(element => !element.skill.some(skillItem => panel.includes(skillItem)) )
性能优化建议(可选)
如果panel数组长度较大,可以提前转成Set降低查找的时间复杂度:
const panelSet = new Set(panel) const result = list.filter(element => element.skill.some(skillItem => panelSet.has(skillItem)) )
内容的提问来源于stack exchange,提问作者KiranM
相关产品推荐
相关产品推荐

