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

JavaScript中返回省略指定属性对象的最佳实现方式

在JavaScript中移除对象属性并返回新对象的最佳方式

首先得澄清一点:你用{ ...obj, c: undefined }这种方式,并没有真正移除c这个键——它依然存在于返回的对象中,只是值被设为undefined。如果要彻底移除属性,得用其他方法。

接下来针对你不想用扩展运算符创建中间对象的需求,我给你几个实用的方案:

1. 直接删除属性(注意原对象是否可修改)

如果允许修改原始对象,那最简单的方式就是直接用delete操作符:

function removeCKey() {
  const obj = {a: 'a', b: 'b', c: 'c'};
  delete obj.c;
  return obj;
}
const myObj = removeCKey();
// myObj 现在是 {a: 'a', b: 'b'},没有c键

但要注意:这种方式会修改原始对象,如果这个对象在其他地方还会被用到,可能会引发意外问题。

2. 复制后删除(不修改原对象)

如果不想改动原对象,可以先浅复制一份,再删除目标属性:

function removeCKey() {
  const obj = {a: 'a', b: 'b', c: 'c'};
  const newObj = Object.assign({}, obj); // 浅复制原对象
  delete newObj.c;
  return newObj;
}
const myObj = removeCKey();

这里Object.assign会创建一个全新的对象,复制原对象的所有可枚举属性,然后删除新对象上的c,原对象完全不受影响,也没有用到扩展运算符。

3. 支持多属性移除的通用函数

如果需要一次性移除多个属性,可以写一个更灵活的通用函数:

function removeProperties(obj, ...keysToRemove) {
  const newObj = Object.assign({}, obj);
  keysToRemove.forEach(key => delete newObj[key]);
  return newObj;
}

// 使用示例
const originalObj = {a: 'a', b: 'b', c: 'c', d: 'd'};
const myObj = removeProperties(originalObj, 'c', 'd');
// myObj 是 {a: 'a', b: 'b'}

这个函数可以处理任意数量的属性移除需求,同样不会修改原对象,也符合你避免扩展运算符的要求。

关于你提到的解构扩展方式

顺便说一句,你之前写的解构扩展代码(const {c, ...rest} = obj; return rest;)其实是现在社区比较推荐的简洁写法。虽然确实会创建中间对象,但在大多数业务场景下,这种性能影响可以忽略不计——现代JS引擎对这种语法的优化已经做得很好了。如果不是在性能极其敏感的场景(比如高频循环),其实完全可以放心使用。

总结一下:

  • 如果允许修改原对象:直接用delete是最快的选择
  • 不允许修改原对象:用Object.assign复制后删除,或者通用的移除函数
  • 追求代码简洁且不在意中间对象:解构扩展是最优方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:25:15