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

Does changing the value of an object in a subarray change the value of the object in the "main" array?

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

我想更改 'valid objects' 数组和 'main' 数组的对象值。如果我从 'valid 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() 会永远改变对象的条件字段吗?或者我应该以不同的方式处理这个问题?

编辑:固定语法。

是的,在 javascript 中,所有对象都是通过引用而非值分配的。当你想复制一个对象时,你需要克隆它。

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

还有你的语法:

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

似乎不​​对,您应该将这些名称更改为 literals 而不是 identifiers,对吗?

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