javascript中不能直接用解构赋值提取新对象,但可通过解构+对象字面量简写构造指定属性的新对象;也可用rest操作符剔除字段,或封装pick函数动态选取属性。

JavaScript 中不能直接用解构赋值“提取出一个新对象”,解构赋值本身是把属性值取出来赋给变量;但你可以结合解构 + 对象字面量简写,快速构造只含指定属性的新对象。
用解构 + 简写属性生成新对象
这是最常用、最直观的方式:先解构出所需属性,再用它们组装新对象。
- 语法简洁,语义清晰,兼容性好(ES6+)
- 适合属性名与目标键名一致的情况
例如:
const user = { name: 'Alice', age: 30, email: 'alice@example.com', role: 'admin' };
// 提取 name 和 email 构造新对象
const { name, email } = user;
const publicInfo = { name, email }; // ← 简写属性:等价于 { name: name, email: email }
console.log(publicInfo); // { name: 'Alice', email: 'alice@example.com' }
一行写法:解构与对象创建合并
可以省略中间变量,用立即执行的解构 + 对象字面量实现“一行提取”。
- 利用圆括号避免语法歧义(因为 { } 开头会被解析为代码块)
- 适合临时构造、函数返回或链式操作场景
写法如下:
const user = { id: 123, name: 'Bob', token: 'abc123', permissions: ['read'] };
const safeUser = ({ name, id } = user, { name, id }); // 注意:这里需确保解构有默认值或 user 存在
// 更稳妥的一行写法(推荐):
const profile = (({ name, email }) => ({ name, email }))(user);
// 或更常见地:
const { name, email } = user; const profile = { name, email };
用 rest 操作符排除不需要的属性
如果想“剔除某些字段”,保留其余所有属性,可用 rest 操作符配合解构。
- 适用于需要保留大部分属性,只去掉敏感或冗余字段
- 注意:rest 会收集所有未被显式解构的自有可枚举属性
示例:
const data = { username: 'carol', password: '123', token: 'x9z', lastLogin: '2024-01-01' };
const { password, token, ...publicData } = data;
console.log(publicData); // { username: 'carol', lastLogin: '2024-01-01' }
封装成通用工具函数(可选进阶)
若频繁做这类操作,可写个简单工具函数,提高复用性和可读性:
const pick = (obj, keys) =>
Object.fromEntries(keys.map(key => [key, obj[key]]));
// 使用:
const user = { id: 456, name: 'Dan', phone: '123', avatar: '/img.png' };
const minimal = pick(user, ['id', 'name']); // { id: 456, name: 'Dan' }
这个函数不依赖解构,但语义明确,适合动态字段名场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











