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

JavaScript嵌套数组过滤selectedItem为true元素问题排查

问题根因

你的过滤代码没生效,核心是搞错了Array.filter的判断逻辑:

  • filter遍历的时候,只有回调返回假值才会剔除当前元素,返回真值就保留
  • 你在外层filter里返回的是内层items.filter的执行结果,这个结果永远是个数组——JS里哪怕是空数组,也属于真值,所以外层判断永远成立,自然把所有原元素都返回了。
正确写法

你要的是保留原来的列结构,只把每个列下没选中的item去掉,这时候不该在外层用filter,应该用map遍历每个列对象,单独处理每个列的items:

const columnsWithSelectedItems = defaultColumnsWithItems.map(column => {
  return {
    ...column,
    items: column.items.filter(item => item.selectedItem)
  }
})

小提示:selectedItem本身就是布尔值,不用多写=== true,直接传属性值就行。

如果过滤完某个列下面一个选中项都没有,你也想把这个列整个删掉,就在后面再接一层filter:

const columnsWithSelectedItems = defaultColumnsWithItems
  .map(column => ({
    ...column,
    items: column.items.filter(item => item.selectedItem)
  }))
  // 删掉没有选中项的空列
  .filter(column => column.items.length > 0)

另外提一句,你原来的代码里变量名拼错了:colmunsWithItemsToFilter里的“列”单词正确拼写是columns,漏了个n,跑代码的时候记得改,不然会报变量未定义的错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:45:36