javascript中剩余属性(rest property)本质是对象解构时提取指定字段,其余自有可枚举属性自动归入新对象;它天然实现“黑名单收集”,如需“白名单过滤”应使用pick函数或omit。

JavaScript 中用剩余属性(rest property)过滤不需要的字段,本质是“解构时把想要的字段单独取出来,剩下的放进一个新对象”——这需要配合对象解构语法使用。
基础用法:解构时提取关键字段,其余归入剩余对象
假设你有一个用户对象,只想保留 name 和 age,去掉 email、phone、address 等无关字段:
const user = {
name: '张三',
age: 28,
email: 'zhang@example.com',
phone: '138****1234',
address: '北京市朝阳区'
};
const { name, age, ...rest } = user;
console.log({ name, age }); // { name: '张三', age: 28 }
console.log(rest); // { email: 'zhang@example.com', phone: '138****1234', address: '北京市朝阳区' }
这里 { name, age, ...rest } 表示:把 name 和 age 单独解构出来,其余所有自有可枚举属性都自动收集到 rest 对象中。
反向操作:只保留需要的字段(真正“过滤掉不需要的”)
上面的 rest 是“不要的”,而你要的是“要的”。所以只需新建一个对象,只包含你想保留的字段:
- 直接写:
const filtered = { name, age }; - 或封装成函数,支持动态字段名:
function pick(obj, keys) {
return keys.reduce((acc, key) => {
if (obj.hasOwnProperty(key)) acc[key] = obj[key];
return acc;
}, {});
}
// 使用
const cleanUser = pick(user, ['name', 'age']); // { name: '张三', age: 28 }
注意:剩余属性本身不提供“白名单过滤”,它天然做的是“黑名单收集”。真要“过滤掉不需要的”,推荐用 pick(白名单)或 omit(黑名单,可用 Lodash 或自行实现)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
小心陷阱:剩余属性只处理顶层、自有、可枚举属性
以下情况不会被 ...rest 捕获:
- 原型链上的属性(如
toString) - 不可枚举属性(如
Object.defineProperty(obj, 'hidden', { value: 42, enumerable: false })) - Symbol 键(除非显式列出,否则
...rest默认忽略 Symbol)
如果需处理 Symbol,得手动合并:
const { name, age, ...rest } = user;
const symbolKeys = Object.getOwnPropertySymbols(user);
symbolKeys.forEach(sym => {
rest[sym] = user[sym];
});
实用技巧:结合函数参数解构做 API 入参净化
后端接口常收到一堆冗余字段,可在函数入参时直接过滤:
function createUser({ name, age, ...ignored }) {
// 只用 name 和 age,其他自动丢弃(不参与业务逻辑)
console.log('创建用户:', { name, age });
// ignored 包含所有其他字段,可用于日志审计(如需)
console.debug('忽略字段:', ignored);
}
调用时传入完整对象,函数内部已自动完成“清洗”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










