如何通过 javascript lodash 更改嵌套 JSON 中的数据
How to change data in a nested JSON by javascript lodash
例如,我有一个 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 数组来做到这一点?
非常感谢你
正如@Tibrogargan 提到的,如果您需要进行深拷贝,这个答案并不好,因为 map 函数进行浅拷贝
更多相关信息和更多深度复制方法,您可以在此处查看 https://javascript.plainenglish.io/how-to-deep-copy-objects-and-arrays-in-javascript-7c911359b089#:~:text=4.,objects%20are%20not%20actually%20cloned。
它可能对你不好请检查 Tibrogargan 答案
可以使用Javascript
的地图方法
let 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 },
],
};
let newArray = data.employees.map((emp) => {
if (emp.age == 33) emp.age = 1;
return emp;
});
console.log(newArray);
关于地图功能的更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
为了创建新数组,您需要注意不要修改数组的现有元素。您可以通过多种方式执行此操作,但是由于您的数据是多层次的,因此使用 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)
Map 是一个很好的方法,但如果它嵌套在对象中的某处,您还可以添加扩展运算符:
const object = {
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 employees = object.employees.map((employee) => {
employee.age = employee.age === 33 ? 1 : employee.age;
return employee
})
const newObject = {
...object,
employees: employees
}
console.log(newObject)
例如,我有一个 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 数组来做到这一点? 非常感谢你
正如@Tibrogargan 提到的,如果您需要进行深拷贝,这个答案并不好,因为 map 函数进行浅拷贝 更多相关信息和更多深度复制方法,您可以在此处查看 https://javascript.plainenglish.io/how-to-deep-copy-objects-and-arrays-in-javascript-7c911359b089#:~:text=4.,objects%20are%20not%20actually%20cloned。
它可能对你不好请检查 Tibrogargan 答案
可以使用Javascript
的地图方法 let 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 },
],
};
let newArray = data.employees.map((emp) => {
if (emp.age == 33) emp.age = 1;
return emp;
});
console.log(newArray);
关于地图功能的更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
为了创建新数组,您需要注意不要修改数组的现有元素。您可以通过多种方式执行此操作,但是由于您的数据是多层次的,因此使用 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)
Map 是一个很好的方法,但如果它嵌套在对象中的某处,您还可以添加扩展运算符:
const object = {
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 employees = object.employees.map((employee) => {
employee.age = employee.age === 33 ? 1 : employee.age;
return employee
})
const newObject = {
...object,
employees: employees
}
console.log(newObject)