JavaScript中如何从对象中省略指定属性并生成新对象?
在JavaScript中省略对象指定属性的实现方法
嘿,这个需求在JS里有好几种实用的实现方式,我给你整理了几个常用的,涵盖单行和多行写法,你可以根据场景选择:
1. 解构赋值 + 剩余运算符(最简洁推荐)
这是现代JS里最常用的写法,不管单行还是多行都很清晰,而且不会修改原对象。
单行写法
const { b, ...newTest } = test;
多行写法(适合省略多个属性时更易读)
// 要省略多个属性的话,直接在解构里列出来就行 const { b, // 要排除的属性b c, // 如果还要排除c,就加在这里 ...newTest } = test;
原理:通过解构语法把不需要的属性单独提取出来,然后用剩余运算符...把剩下的所有属性打包成一个新对象newTest。
2. Object.fromEntries + 过滤(动态排除更灵活)
如果需要动态指定要排除的属性(比如从数组里读取要排除的键),这个方法会更方便。
单行写法
const newTest = Object.fromEntries(Object.entries(test).filter(([key]) => key !== 'b'));
多行写法(复杂过滤逻辑更清晰)
// 比如要排除多个属性,就用数组includes判断 const excludedKeys = ['b', 'c']; const newTest = Object.fromEntries( Object.entries(test).filter(([key]) => { return !excludedKeys.includes(key); }) );
原理:先把原对象转成键值对数组(Object.entries(test)),然后过滤掉不需要的键值对,最后用Object.fromEntries把过滤后的数组转回对象。
3. 手动遍历(兼容旧环境)
如果你的代码需要兼容ES6之前的旧环境,或者需要更精细的属性控制,可以用传统的遍历写法:
const newTest = {}; for (const key in test) { // 确保只处理对象自身的可枚举属性,避免继承来的属性 if (test.hasOwnProperty(key) && key !== 'b') { newTest[key] = test[key]; } }
注意:所有方法都会返回一个新对象,原对象test不会被修改,这符合函数式编程的 immutable 原则哦~
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

