如何用JavaScript为JSON对象嵌套数组补全缺失的默认键值对?
为嵌套JSON对象的contact和address字段补全默认值(JavaScript实现)
需求说明
需要处理包含嵌套数组的JSON对象,为其中的contact和address字段补全默认键值:
contact默认结构:{"phone": "", "email" : "", "fax": "", "website": ""}address默认结构:{"city": "", "country": "", "house_number": "", "street name": ""}
若目标字段存在缺失的键,自动填充为上述默认空字符串。
输入示例
{ "data": [ { "name": "John", "contact": { "phone": "987-654-3210", "email": "john123@xyz.com" }, "address": { "city": "Berlin", "country": "Germany" } } ] }
期望输出
{ "data": [ { "name": "John", "contact": { "phone": "987-654-3210", "email": "john123@xyz.com", "fax": "", "website": "" }, "address": { "city": "Berlin", "country": "Germany", "house_number": "", "street name": "" } } ] }
实现代码
先定义默认结构,再通过遍历数组合并默认值与原数据:
// 定义默认字段结构 const DEFAULT_CONTACT = { phone: "", email: "", fax: "", website: "" }; const DEFAULT_ADDRESS = { city: "", country: "", house_number: "", "street name": "" }; // 处理数据的函数 function fillDefaultFields(items) { return items.map(item => { // 合并默认contact与原数据,补全缺失键 const filledContact = { ...DEFAULT_CONTACT, ...item.contact }; // 合并默认address与原数据,补全缺失键 const filledAddress = { ...DEFAULT_ADDRESS, ...item.address }; // 返回包含补全后字段的新对象 return { ...item, contact: filledContact, address: filledAddress }; }); } // 使用示例 const inputData = { "data": [ { "name": "John", "contact": { "phone": "987-654-3210", "email": "john123@xyz.com" }, "address": { "city": "Berlin", "country": "Germany" } } ] }; // 执行补全操作 inputData.data = fillDefaultFields(inputData.data); // 打印结果 console.log(JSON.stringify(inputData, null, 2));
代码说明
- 使用ES6的展开运算符(
...)合并对象:默认对象的键会被原数据中已存在的键覆盖,缺失的键则保留默认的空字符串。 - 若原对象中没有
contact或address字段,...item.contact会被解析为undefined,展开后不影响结果,最终会直接使用完整的默认结构。
内容的提问来源于stack exchange,提问作者Shan
相关产品推荐
相关产品推荐

