首页 > 解决方案 > 如何通过 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 数组来做到这一点?非常感谢你

标签: javascriptreactjslodash

解决方案


为了创建一个新数组,您需要注意不要修改数组的现有元素。您可以通过多种方式执行此操作,但是由于您的数据是多级的,因此使用类似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)


推荐阅读