过滤后得到本不应为空的空数组问题排查
你遇到的问题是明明觉得过滤条件应该命中部分元素,但composites_copy始终为空,大概率是这几个原因导致的:
类型不匹配导致判断失效:虽然用了
==做宽松相等,但如果composite.blocked和showBlocked的类型不一致,可能出现你预期匹配但实际不匹配的情况。比如composite.blocked是布尔值true,但showBlocked是字符串"true",此时"true" == true的结果是false;再比如部分composite没有blocked属性,composite.blocked会是undefined,如果showBlocked是false,undefined == false也会返回false。你可以在filter回调里加一行console.log(composite.blocked, showBlocked, composite.blocked == showBlocked),直接查看每一次判断的实际结果是否和预期一致。element.composites本身无有效元素:如果遍历到的element里的composites本来就是空数组,或者所有元素都不满足过滤条件,那filter后的结果自然是空的。可以在forEach循环里先打印element.composites,确认原始数组的内容。外层
filtered数组存在问题:如果filtered数组本身是空的,或者里面的元素都没有composites属性,那整个循环都不会生成有效结果,先确认filtered的内容是否符合预期。
另外提个无关当前问题的细节:你对element.category用了_.cloneDeep做深拷贝,但composites直接用了filter后的数组引用,如果后续需要修改composites_copy里的元素,可能会影响原数组,这点可以根据需求调整。
内容的提问来源于stack exchange,提问作者fg_st

