2016-05-11 10 views
-1

私は2D配列 "javascript"を持っています。そのため、以下のコードと同じ1D配列で各行を初期化します。私はallcolorの各列の各要素を変更するjavascriptの2D配列の要素を上書きする理由

var allcolor=[]; 
var color=["#f73214","#f5f714","#54f714","#141df7","#006400","#556B2F","#2F4F4F", 
      "#808080","#8FBC8F","#4B0082","#9400D3","#483D8B","#1E90FF","#00BFFF", 
      "#FFFF00","#ADFF2F","#9932CC","#FF69B4","#FF1493","#8B0000","#8B4513", 
      "#B22222","#CD5C5C","#E9967A","#FF8C00","#DAA520","#F0E68C","#FFFAF0", 
      "#000000"]; 

for(p=0;p<x.length;p++){ 
    allcolor[p]=color; 
} 

は、allcolorの全ての行の他の要素を上書きします。このコードを実行すると、すべての[..] [0]とすべての[..] [4]が同じ値 '#000000'と '#ffffff'であることがわかります。

console.log(allcolor); 
allcolor[0][0]='#000000'; 
console.log(allcolor); 
allcolor[0][4]='#ffffff'; 
console.log(allcolor); 

1行の値を変更するにはどうすればよいですか?

+0

を行う 'X'とは何ですか? 'color'を使うつもりはありませんか? – Arg0n

+0

@Emissary 1D配列を別の1D配列に置きます –

+0

そして、varキーワードを使用して、不要にグローバル変数を初期化しました。 –

答えて

0

javascript変数は、オブジェクトが属するメモリ場所(C++のポインタのようなもの)への参照のみを格納するため、このようなことが起こります。 allcolor配列に4回カラーを置くと、同じオブジェクトを参照するので、1つの行の値を変更すると、すべての行の値が変更されます。これを避けるために

allcolor[p]=color.slice(); 
関連する問題