0

我有下面的示例代码;

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

我会很感激任何帮助....在此先感谢。

4

3 回答 3

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 上

更新:

好的,我将假设myarray您希望转换的是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(",");

仅出于兴趣考虑,上述 flatten 方法上的jsperf 。

于 2013-05-02T21:56:55.930 回答
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 来调整条目数。

于 2013-05-02T22:00:44.363 回答
0

您可以使用 lodash 或 underscore 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]]

于 2020-01-23T04:46:07.777 回答