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

是否可通过Object.assign实现“反向展开”以获取对象的剩余属性?

实现方案

下面给出两种和原生解构...rest行为完全一致的替代方案,均不需要使用展开运算符:

方案1:Object.assign配合delete操作

适合需要移除的键数量较少的场景,写法最简洁:

// 先通过Object.assign浅拷贝原对象所有属性
const rest = Object.assign({}, bunchOfKeysAndValues);
// 逐个移除不需要的键
delete rest.a;
delete rest.b;

方案2:键过滤 + reduce 批量处理

适合要移除的键数量多、或者排除键是动态生成的场景,不需要逐个写delete语句:

// 先定义要排除的键列表
const excludeKeys = ['a', 'b'];
const rest = Object.keys(bunchOfKeysAndValues).reduce((result, currentKey) => {
  // 只保留不在排除列表里的键值对
  if (!excludeKeys.includes(currentKey)) {
    result[currentKey] = bunchOfKeysAndValues[currentKey];
  }
  return result;
}, {});

注意事项

  • 两种方案都是对原对象做浅拷贝,和原生解构...rest的行为完全一致:如果原对象的属性值是引用类型(对象、数组等),修改rest中对应引用类型的内部值会同步影响原对象。
  • 如果需要深拷贝,可在浅拷贝的基础上自行添加深拷贝逻辑,和原生展开运算符的适配方式相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:36:02