2017-03-03 3 views
0

私の目標はこのような配列を作ることですが、混乱するかもしれません。アレイを別の配列にプッシュして2レベル配列にするにはどうすればよいですか?

var array2D= [ 
    { locations: [0, 0, 0], status: ["", "", ""] }, 
    { locations: [0, 0, 0], status: ["", "", ""] }, 
    { locations: [0, 0, 0], status: ["", "", ""] } 
], 

私は以下のような配列があるかどうかを検討してください。

var locations = [0,0,0]; 
var status = ["","",""]; 

何とか2dアレイを作るためにそれらをプッシュできますか? 私はこのような何かをしようとしたが、それはあなたが、配列に対応するそれらの割り当て位置や状態などのキーを持つオブジェクトを作成し、その後、単にあなたの新しい配列にプッシュする必要が

var the2Darray =[]; 
the2Darray.push(location,status); 
+2

あなたが作るしようとしている事は、2次元配列ではありません。 –

+0

この質問のロジックの一部を解明する必要があります。たとえば、最終配列に3行、なぜ2行でないのですか?これは2D配列ではなく、1D配列のオブジェクト群です。 –

+1

実際には、各オブジェクトに位置とステータス属性があり、どちらも配列であるようにオブジェクトの配列を作成します。 –

答えて

3
var locations = [0,0,0]; 
var status = ["","",""]; 
var the2Darray =[]; 
the2Darray.push({locations: locations,status: status}); 
+0

ありがとう!それは魅力のように働く。私は間違った論理を持っているようだ – Buddy

2

動作しません。仮定すると、

var 2dArray = []; 
for(var i = 0; i < lengthYouWant; i++) { 
    var locations = [1,2,3]; 
    var status = ["a", "b", "c"]; 
    var obj = {locations : locations, status : status}; 
    2dArray.push(obj); 
} 
+0

これは動作します!大変ありがとう! – Buddy

1

、あなたは文字列、数値、ブール値、ヌル、未定義、(ECMAScriptの2015の新機能)のシンボルのように、primitive typesのコピーにArray#sliceを使用する必要があるよりも、独立した配列をしたいです。スプライスを使用していない場合は、42に見てください何happpens、

var locations = [0, 0, 0], 
 
    status = ["", "", ""]; 
 
    array = [], 
 
    l = 3; 
 

 
while (l--) { 
 
    array.push({ locations: locations.slice(), status: status.slice() }); 
 
} 
 

 
array[2].locations[0] = 42; 
 

 
console.log(array)
.as-console-wrapper { max-height: 100% !important; top: 0; }

このように、locationsstatusのすべての配列は元の配列と同じ参照を共有します。

var locations = [0, 0, 0], 
 
    status = ["", "", ""]; 
 
    array = [], 
 
    l = 3; 
 

 
while (l--) { 
 
    array.push({ locations: locations, status: status }); 
 
} 
 

 
array[2].locations[0] = 42; 
 

 
console.log(array)
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

これはちょっと複雑ですが、エレガントなようですが、後でお試しください! – Buddy

関連する問題