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

JavaScript如何根据指定name值移除JSON数组中的对应对象

按name字段删除JSON数组指定对象

完全可以仅通过name字段匹配完成对应对象的删除操作。

推荐实现(filter 方案,无副作用)

Array.filter是最适配这个场景的方法,不会修改原数组,逻辑简洁:

let json = [{
  "name":"John",
  "age":"29"
},
{
  "name":"Billy",
  "age":"45"
}];
let remObj = ['John'];

// 过滤掉name存在于待删除列表中的项
const result = json.filter(item => !remObj.includes(item.name));
// result 值为 [{name: "Billy", age: "45"}]

注意:filter不会修改原数组,必须用变量接收它的返回值才能得到过滤后的结果,这是很多人用filter没达到预期的最常见原因。

其他方法实现&常见失效原因

你之前提到的几个方法没生效,基本都是用法问题:

  • splice:会直接修改原数组,如果正序遍历数组同时调用splice删除元素,会导致数组索引整体前移,出现漏删。如果要用splice实现,必须倒序遍历:
    for (let i = json.length - 1; i >= 0; i--) {
      if (remObj.includes(json[i].name)) {
        json.splice(i, 1);
      }
    }
    
  • slice:本身的作用是截取数组片段返回新数组,不会对原数组做删除操作,本身就不适合做批量匹配删除的场景。

性能优化提示

如果待删除的name列表数据量超过1000条,可以先把待删除列表转成Set结构,把查询复杂度从O(n)降到O(1),提升过滤速度:

const remNameSet = new Set(remObj);
const result = json.filter(item => !remNameSet.has(item.name));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:06:24