【问题标题】:How can I create a new Object from a JSON value without changing the parent in JS?如何在不更改 JS 父对象的情况下从 JSON 值创建新对象?
【发布时间】:2022-11-30 23:58:34
【问题描述】:
我一直在使用 JS + JSON,但我找不到从某个父对象的值创建新对象的方法。例如:
const parent = {
"child": {"value": 12},
"otherChild": {"value": 83}
}
// I want to create a duplicate without editing the original
const newChild = parent.child;
newChild.value = 25;
// Logs 25
console.log(parent.child.value);
我试过使用new Object();,但还是不行。 :/
【问题讨论】:
标签:
javascript
node.js
json
object
【解决方案1】:
最简单的方法是:
const parent = {
"child": {"value": 12},
"otherChild": {"value": 83}
}
// I want to create a duplicate without editing the original
const newChild = JSON.parse(JSON.stringify(parent.child));
newChild.value = 25;
如果您不需要任何旧浏览器节点版本支持,您也可以轻松使用:
const newChild = structuredClone(parent)
两者都适用于子对象。
【解决方案2】:
您可以尝试使用名为cloneDeep 的lodash 方法
const _ = require('lodash');
var obj = {
x: 23
};
// Deep copy
var deepCopy = _.cloneDeep(obj);
console.log('Comparing original with'
+ ' deep ', obj === deepCopy);
obj.x = 10; // Changing original value
console.log('After changing original value');
console.log("Original value ", obj);
console.log("Deep Copy value ", deepCopy);
然而也有本地解决方案,看看这个answer