Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:分配给数组中的对象会更改数组中所有对象的值_Javascript_Javascript Objects - Fatal编程技术网

JavaScript:分配给数组中的对象会更改数组中所有对象的值

JavaScript:分配给数组中的对象会更改数组中所有对象的值,javascript,javascript-objects,Javascript,Javascript Objects,我有一个对象,它有一个数组来容纳这个对象的所有子对象,这些子对象也是同一个对象的实例(我需要一个树状结构,其中对象是树的节点) 问题是没有得到11个对象,而是每个对象都有一个标志[0,0,0,0,0,0,0,0,0,1],我得到11个对象,它们都有标志1,(最后一个) 你能看看怎么了吗 谢谢问题在于: for( i = 0 ; i < len ; i++){ kddFlag.flagValue = data.flagValues[i]; this._chil

我有一个对象,它有一个数组来容纳这个对象的所有子对象,这些子对象也是同一个对象的实例(我需要一个树状结构,其中对象是树的节点)

问题是没有得到11个对象,而是每个对象都有一个标志[0,0,0,0,0,0,0,0,0,1],我得到11个对象,它们都有标志1,(最后一个)

你能看看怎么了吗

谢谢

问题在于:

for( i = 0 ; i < len ; i++){
        kddFlag.flagValue = data.flagValues[i];
        this._children.push(
            new bugObject(kddFlag)
        );
问题是:

for( i = 0 ; i < len ; i++){
        kddFlag.flagValue = data.flagValues[i];
        this._children.push(
            new bugObject(kddFlag)
        );

这是一个为对象指定引用的问题,这是众所周知的,甚至在其他语言中也会发生

我会给你一个简单的例子:

假设您想要一个3x3矩阵,建模为一个数组数组,填充所有为零的行

你可能很想写作

row = [0,0,0];
A = [];
for(j=0;j<3;++j) A[j] = row;
row=[0,0,0];
A=[];

对于(j=0;j来说,这是一个为对象指定引用的问题,这是众所周知的,甚至在其他语言中也会发生

我会给你一个简单的例子:

假设您想要一个3x3矩阵,建模为一个数组数组,填充所有为零的行

你可能很想写作

row = [0,0,0];
A = [];
for(j=0;j<3;++j) A[j] = row;
row=[0,0,0];
A=[];

对于(j=0;jI希望
this(新bugObject(kddFlag));
是个问题。您好,感谢您的回复,我重构了代码,将其发布到这里,并放置了错误的版本,请再看一看!我希望
this(新bugObject(kddFlag))
这就是问题所在。嗨,谢谢你的回复,我重构了代码,将其发布到这里,并放入了错误的版本,请再看一看!嗨,谢谢你的回答,你的意思是我必须做一些类似var kddFlag的事情,并为每个新对象创建一个新的kddFlag?嗨,谢谢你的回答,你的意思是我必须做一些类似var kddFlag的事情并创建一个新的对象每个新对象都有一个新的kddFlag?
row = [0,0,0];
A = [];
for(j=0;j<3;++j) A[j] = row;