2012-01-26 14 views
4

次のコードでは、0の両方の要素が、-1に設定されている場合でも、-に設定されます。 labelArrayへの参照を作成していますか、それとも別のものですか?配列の値を変更する元の配列を変更するJavaScript

labelArray.sort(compare); 
valueArray = labelArray; 
valueArray[0] = '-1'; 
labelArray[0] = '-'; 

すべての助けがありがとうございます。

答えて

7

はい。 valueArraylabelArrayの両方が、同じ基礎配列を参照しています。はコピーを作成するには、slice()を使用します。

valueArray = labelArray.slice(0); 

注:プリミティブ配列のために正常に動作します1つのレベルの深スライス()のみをコピー、。配列に複雑なオブジェクトが含まれている場合は、jQueryのclone()、credit @Jonathanのようなものを使用します。

+0

「スライス」の+1。 – ruakh

+0

これは、オブジェクトが正しいためですか? – OpensaurusRex

+2

@ deth4uallはい、JS内の変数、オブジェクトプロパティ、および配列スロットはすべて_reference_値ですが、これらは_contain_値ではありません。 – Phrogz

2

私はlabelArray […]への参照を作成していますか?

はい、正確です。 valueArraylabelArrayはまだコピーされていない同じオブジェクトを識別します。

1

valueArrayは、labelArrayの単なる参考情報です。

あなたがしたいのは、配列を複製することです。これは、jQuery.clone()または同様のクローン関数を使用して行うことができます。

+1

プロジェクトはjQueryを使用していないので、今はテーブルにはありません。私はおそらく結局jQueryに移行するつもりです。 – OpensaurusRex