更改子数组中对象的值是否会更改 "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 );
我正在使用 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 );