javascript数组中的水平到垂直

时间:2013-05-02 21:44:14

标签: javascript arrays

我有以下示例代码;

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

我将不胜感激任何帮助......先谢谢。

3 个答案:

答案 0 :(得分:2)

此解决方案将从您的平面阵列转换为您所描述的多维数组。

的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

<强>更新

好的,我将假设@ {@ 1}正如@bergi所建议的那样,你希望转换而不是myarray。基于这个假设,这里是一个修改过的解决方案

的Javascript

myarray2

jsfiddle

这是另一种展平方法

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);

如果你不喜欢

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

仅为了感兴趣,以上展平方法的jsperf

答案 1 :(得分: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来调整条目数。

答案 2 :(得分:0)

您可以使用lodash或下划线JavaScript由一个衬里完成此操作,

let arr=[100,200,300,400,500,600,700,800,900,100,1100,1200,1300,1400,1500,1600];
let len=4;  // Can be varied upon your requirement
let soln= _.unzip( _.chunk(arr,len)).map((x)=>{return (x!==undefined)?x:[];});
console.log(soln); // This will print resultant array

这将打印以下结果。

[[100,500,900,1300],

[200,600,100,1400],

[300,700,1100,1500],

[400,800,1200,1600]]