如何用ES6语法简化大JSON对象拆分为小对象的重复操作?
解决大型JSON对象拆分时重复赋值的ES6语法技巧
兄弟,我太懂你这种重复写属性的痛苦了!每次拆大JSON都要复制粘贴一堆属性名,简直是体力活。ES6确实给我们准备了几个超好用的语法糖,能帮你少写好多重复代码,我给你捋捋最实用的几个:
1. 对象解构赋值+字面量简写
这是最直接的ES6原生方案,能一次性从大对象里提取你需要的属性,直接复用属性名创建小对象:
// 你的大型JSON对象示例 const largeUser = { first_name: "Alice", facebook_account: "alice_123", email: "alice@example.com", age: 28, address: "123 Main St", // 其他N多属性... }; // 传统写法(重复又麻烦) const basicProfile = { first_name: largeUser.first_name, facebook_account: largeUser.facebook_account, // 更多重复赋值... }; // ES6简化写法 const { first_name, facebook_account, email } = largeUser; const basicProfile = { first_name, facebook_account, email };
2. 封装属性提取工具函数
如果需要频繁提取不同的属性组合,写个复用性强的小函数会更高效,用ES6的reduce和箭头函数就能轻松实现:
// 自定义pick函数:从对象中提取指定属性 const pick = (obj, keys) => keys.reduce((result, key) => { result[key] = obj[key]; return result; }, {}); // 使用示例:只要传属性数组就行,再也不用重复写赋值! const basicProfile = pick(largeUser, ['first_name', 'facebook_account']); const contactInfo = pick(largeUser, ['email', 'address']);
如果担心属性不存在导致报错,还可以结合ES2020的可选链操作符(?.)做兼容:
const pick = (obj, keys) => keys.reduce((result, key) => { result[key] = obj?.[key]; // 避免属性不存在时抛出错误 return result; }, {});
3. 对象扩展运算符(适合批量排除属性)
如果你的小对象是排除少数属性、保留大部分属性,用扩展运算符(...)配合解构会更方便:
// 提取除了address和age之外的所有属性到userInfo const { address, age, ...userInfo } = largeUser;
不过这个方案更适合“排除式”拆分,如果你是要精准指定提取的属性,还是前面的解构或pick函数更合适。
这些方法应该能帮你省掉好多重复的代码,不用再手动复制粘贴属性名啦!亲测好用,我自己处理大型JSON的时候经常这么干~
内容的提问来源于stack exchange,提问作者Tsar Bomba
相关产品推荐
相关产品推荐

