如何使用JavaScript或Lodash修改嵌套JSON中的指定数据
实现方案
原生JavaScript实现
直接使用数组自带的map方法遍历员工数组,结合对象扩展运算符生成新对象,全程不修改原始数据:
const originalData = { "employees": [ { "name": "Ram", "email": "ram@gmail.com", "age": 23 }, { "name": "Shyam", "email": "shyam23@gmail.com", "age": 28 }, { "name": "John", "email": "john@gmail.com", "age": 33 }, { "name": "Bob", "email": "bob32@gmail.com", "age": 33 } ] }; const processedData = { // 保留根层级其余属性 ...originalData, // 遍历处理员工数组 employees: originalData.employees.map(emp => { // 年龄为33则更新为1,否则保留原属性 return emp.age === 33 ? {...emp, age: 1} : {...emp}; }) };
如果实际使用场景中员工对象存在深层嵌套属性,可以用structuredClone(emp)代替扩展运算符做深拷贝,避免引用类型属性共享的问题。
Lodash实现
可以借助Lodash的工具方法简化操作,同样保证原始数据不被修改:
const processedData = _.cloneDeep(originalData); processedData.employees = _.map(processedData.employees, emp => { if (emp.age === 33) emp.age = 1; return emp; });
也可以不用提前深拷贝,直接生成新结构:
const processedData = { ...originalData, employees: _.map(originalData.employees, emp => emp.age === 33 ? _.assign({}, emp, {age: 1}) : _.clone(emp) ) };
内容的提问来源于stack exchange,提问作者Lê Quốc Khánh
相关产品推荐
相关产品推荐

