2013-05-02 45 views
0

我有下面的示例代碼;水平到垂直的javascript數組

var myarray= [], 
myarray2=[]; 
var L=100; 
for(j =0; j< 4;j++){ 
    for(i =0; i<4;i++){   
     myarray.push([L]); 
     L=L+100; 
    } 
    myarray2.push(myarray); 
    alert(myarray2[j]); 
} 

的輸出將是

100,200,300,400,500,600,700,800,900,100,1100,1200,1300,1400,1500,1600 

是否有可能在陣列中的陣列如下面的值進行排序?

100, 500, 900, 1300 
200, 600, 1000, 1400 
300, 700, 1100, 1500 
400, 800, 1200, 1600 

我很感激任何幫助....在此先感謝。

+0

'myarray2'真的應該包含4個引用相同的'myarray'嗎? – Bergi 2013-05-02 21:47:03

+0

您是否想要以該格式創建數組或將該平面數組更改爲該格式? – Xotic750 2013-05-02 21:47:56

+0

爲什麼不首先創建你想要的2d數組? – Bergi 2013-05-02 21:48:15

回答

1

該解決方案將從您的平面數組轉換爲您所描述的多維數組。

的Javascript

var array = "100,200,300,400,500,600,700,800,900,100,1100,1200,1300,1400,1500,1600".split(","); 
var grouping = 4; 
var result = []; 

array.forEach(function (element, index) { 
    var group = index % grouping; 
    var temp = result[group]; 

    if (!Array.isArray(temp)) { 
     temp = []; 
    } 

    temp.push(element); 
    result[group] = temp; 
}); 

console.log(result); 

jsfiddle

UPDATE:

好吧,我會認爲這是myarray,通過@bergi的建議,你想轉換和不是myarray2。基於這種假設這裏是一個修改的方案

的Javascript

var myarray = [], 
    myarray2 = []; 
var L = 100; 
for (var j = 0; j < 4; j++) { 
    for (var i = 0; i < 4; i++) { 
     myarray.push([L]); 
     L = L + 100; 
    } 

    myarray2.push(myarray); 
} 

var columns = 4; 
var result = []; 
var flattened = myarray.toString().split(","); 
var length = flattened.length; 
var rows = Math.round(length/columns); 

flattened.forEach(function (element, index) { 
    var group = index % rows; 
    var temp = result[group]; 

    if (!Array.isArray(temp)) { 
     temp = []; 
    } 

    temp.push(element); 
    result[group] = temp; 
}); 

console.log(result); 

jsfiddle

這裏是一個替代方法拉平

var flattened = myarray.reduce(function(a, b) { 
    return a.concat(b); 
}); 

,如果你不喜歡

var flattened = myarray.toString().split(","); 

並只爲了興趣而清酒,jsperf上述扁平方法。

+1

實際上,他的'myArray'是[[100],[200],[300],[400],[500],[600],[700] ,[800],[900],[1000],[1100],[1200],[1300],[1400],[1500],[1600]] - 只有輸出'array'字符串提醒它。 – Bergi 2013-05-02 22:02:33

+0

啊哈,謝謝,我沒有看他實際上創造了什麼,只是他所說的。 – Xotic750 2013-05-02 22:04:43

+0

@ Xotic750:你的代碼很整潔...非常感謝.. – pongs 2013-05-03 13:46:01

0

這將從頭開始生成一個數組數組。

var x = 10; 
var y = 4; 
var result = []; 

for(j = 0; j < y; j++) { 
    result[j] = []; 
    for(i = 0; i < x; i++) { 
    result[j].push((j % y + i*y) * 100); 
    } 
} 

console.log(result); 

產量:

[ [ 0, 400, 800, 1200, 1600, 2000, 2400, 2800, 3200, 3600 ], 
    [ 100, 500, 900, 1300, 1700, 2100, 2500, 2900, 3300, 3700 ], 
    [ 200, 600, 1000, 1400, 1800, 2200, 2600, 3000, 3400, 3800 ], 
    [ 300, 700, 1100, 1500, 1900, 2300, 2700, 3100, 3500, 3900 ] ] 

你可以通過改變x和y調整條目的數量。