JavaScript中无法直接用剩余操作符剔除属性,但可通过解构赋值+...提取其余属性(如{ name, age, ...rest }),或封装omit函数动态剔除指定键,二者均返回新对象且不修改原对象。

JavaScript 中不能直接用剩余属性(...)单独“剔除”对象的某些属性,但可以结合解构赋值和剩余操作符,把不需要的属性排除掉,只保留想要的字段。
用解构 + 剩余操作符提取“其余属性”
剩余属性必须出现在解构的末尾,它会收集所有未被显式解构的属性。想“剔除”几个字段,就先解构掉它们,再用 ... 收集剩下的:
const user = { name: 'Alice', age: 30, email: 'a@example.com', role: 'admin' };
// 剔除 name 和 age,保留其余
const { name, age, ...rest } = user;
console.log(rest); // { email: 'a@example.com', role: 'admin' }
动态剔除多个已知键(函数封装)
如果需要灵活剔除任意一组属性,可封装一个工具函数。核心思路是:遍历原对象,跳过要剔除的 key:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用
Object.keys()或Object.entries()遍历 - 用
Object.fromEntries()重建新对象 - 不依赖剩余操作符,但语义清晰、兼容性好
function omit(obj, keysToOmit) {
const keysSet = new Set(Array.isArray(keysToOmit) ? keysToOmit : [keysToOmit]);
return Object.fromEntries(
Object.entries(obj).filter(([key]) => !keysSet.has(key))
);
}
const data = { a: 1, b: 2, c: 3, d: 4 };
const result = omit(data, ['b', 'c']);
console.log(result); // { a: 1, d: 4 }
注意:剩余属性不是“删除”,而是“提取”
剩余操作符本身不会修改原对象,也不会真正“删除”属性——它只是在解构时做一次性的属性分流。如果你需要生成一个不含某些键的新对象,上面两种方式都返回新对象(浅拷贝),原对象保持不变。
立即学习“Java免费学习笔记(深入)”;
- 解构 +
...适合静态、已知要剔除哪些 key 的场景 -
omit函数适合动态传入 key 列表,复用性强 - 不要试图写
{ ...obj, name: undefined }来“删掉”属性——这只会把name设为undefined,键依然存在
扩展:配合展开语法构造新对象(剔除 + 添加/覆盖)
可以在剔除的基础上,添加或覆盖字段:
const { id, ...userWithoutId } = { id: 123, name: 'Bob', active: true };
const newUser = { ...userWithoutId, createdAt: Date.now() };
// { name: 'Bob', active: true, createdAt: 171... }

















