在浏览此链接时 如何在javascript中深入克隆
我遇到了一个通用克隆方法(在接受的答案中).我尝试了直接在javascript中运行它运行给出了完美的输出.
我将该代码放在本机标记中,并尝试克隆GWT中的对象.
我想要克隆的班级是
private class Container
{
Integer i = 5;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时,它只是给我一个同样的对象.有人可以帮忙吗?如果不清楚的话,问我什么.万分感谢.
这是我第一次来。
所以问题是,我有一个带有所有变量的对象,如下所示:
app.Variables = {
var1: 0,
var2: 0,
var3: 0
}
Run Code Online (Sandbox Code Playgroud)
我想将此值存储在名为Defaults的对象中,如下所示:
app.Defaults = app.Variables
Run Code Online (Sandbox Code Playgroud)
但是现在的问题是,在我的代码中,app.Variables.var1例如像这样递增:
app.Variables.var1++
Run Code Online (Sandbox Code Playgroud)
这意味着,app.Defaults.var1也等于app.Variables.var1。
我在这里该怎么办?
我正在尝试将Array克隆到一个新的,我希望克隆的数组没有引用原始副本
我知道有splice和from方法,但这些方法的新数组都引用了原始数组
例如
let original = [ [1,2], [3,4] ];
let cloned = Array.from(original); // this will copy everything from original
original[0][0] = -1;
console.log(cloned[0][0]); // the cloned array element value changes too
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用循环cloned[i][j] = original[i][j],但结果是一样的
如何使用原始Array中具有相同值的每个元素创建一个新Array,但是克隆的Array应该没有对原始Array的引用?
谢谢!
我觉得这真的很奇怪,我是json通过 http 发送的。
{
"foo":"bar",
"foo2":"bar2",
"name":{
"firstName":"Joff",
"middleName":"Ramirez",
"lastName":"Tiquez"
}
}
Run Code Online (Sandbox Code Playgroud)
在服务器上我正在执行这些命令:
var data = req.body; // the json from http
console.log('data', data); // the data now has the req.body's value
delete data.name; // <-- here's the delete
console.log('data', data); // the name object will obviously be deleted
console.log('req.body', req.body); // the name on the req.body was deleted too. Wtf?
Run Code Online (Sandbox Code Playgroud)
req.body.name因此,当我尝试在程序的其他部分使用 时,name现在已经消失了。那是delete应该如何工作吗?
在组件内部,我尝试从可以在组件内部修改的服务中复制对象,但应该保留在服务中.
private test;
public ngOnInit(): {
console.log(this.someService.test.someProperty) //'old'
this.test = this.someService.test;
//not working as well?!
//this.test = Object.assign({}, this.someService.test);
//this.test = Object.create(this.somerService.test);
this.changeTest();
}
public changeTest(): void {
this.test.someProperty = 'new';
}
Run Code Online (Sandbox Code Playgroud)
在init之后,this.test.someProperty以及this.someService.test.someProperty更改为new即使最后应该留下old?
为什么会这样,以及如何只改变属性 this.test
我正在尝试使用回溯法制作数独求解器,但遇到了问题。每当我更改网格数组的副本时,原始数组也会更改。
有人能帮助我吗?
算法:
let grid = [
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, …Run Code Online (Sandbox Code Playgroud) 我有一个JSON文字如下:
var json_1 = {
"name": "Tim",
"toys": ["ball", "bat", "lego"]
};
Run Code Online (Sandbox Code Playgroud)
现在我克隆如下:
var json_2 = json_1;
Run Code Online (Sandbox Code Playgroud)
如果我从json_1(使用splice())中取出玩具,那么似乎就会被移除json_2.如何在不相互依赖的情况下创建副本?