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

JavaScript如何排除对象指定单个属性并基于剩余属性生成新对象?

提取对象排除指定属性后生成新对象的简洁实现

你不需要枚举对象的所有属性,以下几种写法可以大幅简化代码:

1. 对象解构+剩余运算符(优先推荐)

ES2018 原生支持的对象剩余运算符可以直接实现需求,你只需要在解构时把要排除的属性名单独列出来,剩余属性会自动被收集为新对象,完全不需要枚举所有保留属性:

const initial = { a: 'a', b: 'b', c: 'c', d: 'd', /* 省略中间属性直到z */ z: 'z' };

// 仅需声明要排除的属性b,其余属性全部存入result
const { b, ...result } = initial;

// result值为 {a: 'a', c: 'c', d: 'd', ..., z: 'z'},无b属性

如果需要同时排除多个属性,直接在解构位置追加要排除的属性即可:

// 同时排除b、d两个属性
const { b, d, ...result } = initial;

如果要排除的属性名是动态变量,可以结合计算属性名实现:

const excludeKey = 'b'; // 动态指定要排除的键
const { [excludeKey]: _, ...result } = initial;

该写法为纯不可变操作,不会修改原始的initial对象,适合绝大多数业务场景。

2. 浅拷贝后删除目标属性(兼容老旧环境)

如果需要兼容不支持对象剩余运算符的环境,可以先对原对象做浅拷贝,再删除拷贝对象上不需要的属性。禁止直接在原对象上执行删除操作,会污染原始数据:

// 先通过展开运算符做浅拷贝,也可使用Object.assign({}, initial)实现
const result = { ...initial };
delete result.b;

多属性排除时可以循环处理:

const result = { ...initial };
['b', 'd'].forEach(deleteKey => delete result[deleteKey]);

注意:该方法和上述解构方法都属于浅拷贝,若原对象的属性值为引用类型,新对象与原对象的对应属性会指向同一内存地址。

避免使用的写法

你之前提到的枚举全量属性再重组的写法不推荐,不仅代码冗余度高,后续原对象增删属性时还需要同步修改这段逻辑,维护成本很高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:27:11