更改子数组中对象的值是否会更改“main”数组中对象的值?

时间:2017-12-05 09:03:07

标签: javascript arrays p5.js

我正在使用p5.js中的一个对象数组。如果满足与对象值相关的某些条件,我创建另一个数组来保存那些“有效”对象。

我想更改'valid objects'数组和'main'数组的对象值。如果我从'有效obj'数组中更改它,它是否也会从'main'数组更改它?

var objects[]; 
var validObjects[];

function setup() {
    createObj();
    myFunc2();
}

function object( name, condition ) {
    // Define a class called 'object'.
    this.name = name;
    this.condition = condition;
}

function createObj() {
    objects[0] = new object( 'obj0', true );
    objects[1] = new object( 'obj1', true );
    objects[2] = new object( 'obj2', false );
    objects[3] = new object( 'obj3', false );
}

function myFunc() {
    // Pick out the valid objects and put them into another array.
    for( var i = 0; i < objects.length; i++ ) {
        if( objects[i].condition == true )
            validObjects.push( objects[i] );
}

function myFunc2() {
    // Change a field of the objects from the new array.
    for( var i = 0; i < validObjects.length; i++ )
        objects[i].condition = !objects[i].condition;
}

myFunc2()是否会永远更改对象的条件字段?或者我应该采用不同的方法吗?

编辑:修正语法。

1 个答案:

答案 0 :(得分:0)

是的,在javascript中,所有对象都是通过引用而不是值来分配的。如果要复制对象,则需要克隆它。

 var clone = Object.assign({}, cloneTarget); 

还有你的语法:

objects[0] = new object( obj0, true );

似乎已关闭您应该将这些名称更改为literals而不是identifiers正确吗?

objects[0] = new object( 'obj0', true );