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

JavaScript 如何使用filter()方法删除嵌套数组中的指定元素

错误原因

你的原有代码存在两处逻辑问题:

  • 外层对todos调用filter方法时,返回值是过滤后的vpainfo数组,JS中非空数组会被判定为布尔值true,因此所有todo元素都会被保留,没有起到过滤修改的作用
  • 你没有对todo对象的vpainfo字段做赋值修改,原数组的vpainfo内容完全没有发生变化

正确实现

你可以用扩展运算符搭配map+filter实现需求,该写法不会修改原始state对象:

const newObj = {
  ...state,
  todos: state.todos.map(todoObj => ({
    ...todoObj,
    vpainfo: todoObj.vpainfo.filter(({virAddrSeq}) => virAddrSeq !== "345")
  }))
}
console.log(newObj)

如果习惯用Object.assign写法,可以替换为如下版本:

const newObj = Object.assign({}, state, {
  todos: state.todos.map(todoObj => Object.assign({}, todoObj, {
    vpainfo: todoObj.vpainfo.filter(({virAddrSeq}) => virAddrSeq !== "345")
  }))
})

逻辑说明

  • 首先拷贝最外层的state对象,避免修改原始数据
  • 对todos数组调用map方法遍历每个todo对象,返回修改后的新todo对象
  • 新的todo对象中,将vpainfo字段替换为过滤掉virAddrSeq = "345"的新数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:39:00