使用避免初始对象突变的对象复制对象(避免复制引用)
copy object with objects avoiding mutation of the initial object (avoid copy references)
我对通过引用复制对象有疑问
我有一个小片段演示了我不想改变初始对象的问题我可以使用 immutable.js 或一些库来做到这一点,但我想知道如何使用原生 js 来完成。
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
/////////// object Create
let a = {
"0": {
"sortPluginSettings": {
"columnSortType": "numeric",
"sortingOrder": "noSort"
}
}
}
let b= Object.create(a)
console.log("a: ",a)
console.log("b: ",b)
b["0"].sortPluginSettings.sortingOrder="ascending"
console.log("NEWa: ",a) // OOPs mutated
console.log("NEWb: ",b[0])
/////////// object assign
let c = {
"0": {
"sortPluginSettings": {
"columnSortType": "numeric",
"sortingOrder": "noSort"
}
}
}
let e= Object.create(c)
console.log("c: ",c)
console.log("e: ",e)
e["0"].sortPluginSettings.sortingOrder="ascending"
console.log("NEWc: ",c) // OOPs mutated
console.log("NEWe: ",e[0])
</script>
<title></title>
</head>
<body>
</body>
</html>
这样使用:
let a = {
"0": {
"sortPluginSettings": {
"columnSortType": "numeric",
"sortingOrder": "noSort"
}
}
}
var b= JSON.parse(JSON.stringify(a));
b[0].sortPluginSettings.columnSortType=null;
console.log(a);
console.log(b);
我对通过引用复制对象有疑问
我有一个小片段演示了我不想改变初始对象的问题我可以使用 immutable.js 或一些库来做到这一点,但我想知道如何使用原生 js 来完成。
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
/////////// object Create
let a = {
"0": {
"sortPluginSettings": {
"columnSortType": "numeric",
"sortingOrder": "noSort"
}
}
}
let b= Object.create(a)
console.log("a: ",a)
console.log("b: ",b)
b["0"].sortPluginSettings.sortingOrder="ascending"
console.log("NEWa: ",a) // OOPs mutated
console.log("NEWb: ",b[0])
/////////// object assign
let c = {
"0": {
"sortPluginSettings": {
"columnSortType": "numeric",
"sortingOrder": "noSort"
}
}
}
let e= Object.create(c)
console.log("c: ",c)
console.log("e: ",e)
e["0"].sortPluginSettings.sortingOrder="ascending"
console.log("NEWc: ",c) // OOPs mutated
console.log("NEWe: ",e[0])
</script>
<title></title>
</head>
<body>
</body>
</html>
这样使用:
let a = {
"0": {
"sortPluginSettings": {
"columnSortType": "numeric",
"sortingOrder": "noSort"
}
}
}
var b= JSON.parse(JSON.stringify(a));
b[0].sortPluginSettings.columnSortType=null;
console.log(a);
console.log(b);