javascript - 如何通过 javascript lodash 更改嵌套 JSON 中的数据
问题描述
例如,我有一个这样的 JSON 文件
{
"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 }
]
}
现在我想创建一个与此相同的新数组,但修改了特定值,例如如果年龄为 33 则更改为 1,例如
{
"employees": [
{ "name": "Ram", "email": "ram@gmail.com", "age": 23 },
{ "name": "Shyam", "email": "shyam23@gmail.com", "age": 28 },
{ "name": "John", "email": "john@gmail.com", "age": 1 },
{ "name": "Bob", "email": "bob32@gmail.com", "age": 1 }
]
}
我如何使用 lodash 或 javascript 数组来做到这一点?非常感谢你
解决方案
为了创建一个新数组,您需要注意不要修改数组的现有元素。您可以通过多种方式执行此操作,但是由于您的数据是多级的,因此使用类似Array.map()
或 Spread 运算符 ( ...
) 之类的函数可能会出现问题。您需要先复制数据。一种方法是使用JSON.stringify()
和JSON.parse()
创建副本,然后使用数组操作方法(.map()
、.reduce()
、.forEach()
等)对其进行修改以修改数据。
var data = {
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 }
]
}
var copy = JSON.parse(JSON.stringify(data))
copy.employees.map( elem => { elem.age = elem.age==33?1:elem.age; return elem } )
console.log(copy)
推荐阅读
- flowtype - Flow.js 使用未命名的导出声明模块
- javascript - Angular 9 - 如何循环对象数组并按对象属性求和
- amazon-web-services - Sagemaker 调试器服务给出 MissingCollectionFiles 错误
- scikit-learn - Meanshift:与簇质心的距离
- asp.net-core - Samesite cookie 标志和 ASP 2.1
- c# - ASP。NET MVC 5:如果用户是管理员,则返回所有用户的列表
- tensorflow - 限制小数点后的数字(四舍五入)而不破坏TensorFlow中的梯度
- sql - 提高 oracle 中 Merge 语句的性能
- java - 实现 Externalizable 时是否需要显式默认构造函数?
- javascript - 每个循环中的赛普拉斯等待命令