将数组拆分为列

时间:2015-03-17 02:45:29

标签: javascript arrays multidimensional-array

预期结果如下。试图将旧数组拆分为3个数组。我不想“大块”它,而是希望将这些项目放入几乎“列”

var old_array = ["1","2","3","4","5"];
var new_array = new Array();

for(i=0; i<old_array.length; i++)
{
    new_array[i%3].push(old_array[i]);
}

结果应为:

new_array[0] = [3] 
new_array[1] = [1, 4]
new_array[2] = [2, 5]

5 个答案:

答案 0 :(得分:0)

从1开始,并将值引用为old_array [i - 1]

var old_array = ["1","2","3","4","5"];
var new_array = new Array();

for(i = 1; i < old_array.length + 1; i++)
{
    new_array[i%3] = new_array[i%3] || [];
    new_array[i%3].push(old_array[i - 1]);
}

答案 1 :(得分:0)

您无法致电new_array[i%3].push,因为new_array[i%3]不存在。您需要初始化这些子数组,然后才能将值首次推入它们。

要获得所需的结果,您还需要将索引“移位”一个:

var old_array = ["1","2","3","4","5"];
var new_array = [];

for(i=0, mod_i=0; i<old_array.length; i++)
{
    mod_i = (i+1)%3;
    if(!new_array[mod_i]) {
        new_array[mod_i] = [];
    }
    new_array[mod_i].push(old_array[i]);
}

console.log(new_array);

http://jsfiddle.net/yjxdjmsa/

答案 2 :(得分:0)

var old_array      = ["1","2","3","4","5"],
    new_array      = [],
    num_of_columns = 3;   // adjustable

for(var i=0, n=old_array.length; i<n; i++)
{ 

    // 1: turn string into an Int
    var val     = parseInt(old_array[i]);

    // 2: determine column placement
    // change 'val' to 'i' if wanting it by index of old_array (not by value)
    var col_num = val % num_of_columns;

    // 3: create the new column array if it doesn't exist, otherwise use the old one
    var col_arr = new_array[col_num] = new_array[col_num] || [];

    // 4: store the value in the correct column
    col_arr[ col_arr.length ] = val;
}

说明:

  1. 您的输出显示您已将输入作为字符串转换为数字值(此转换没有其他答案)
  2. 目前还不清楚您是按照值对列进行分组,还是将它们放在 old_array 中的位置,因此无论如何,我都必须决定是否进行了简单的更改< / LI>
  3. 要添加到数组,必须存在数组;如果您已经创建了列数组,只需抓取它,或者创建一个新的空白数组以供下次使用
  4. 分配值;注意语法,它应该比.push()调用
  5. 快一点

    结果:

    new_array[0] = [3] 
    new_array[1] = [1, 4]
    new_array[2] = [2, 5]
    

答案 3 :(得分:0)

注意:在您的函数中,i变为全局变量,而不是本地变量,因为您没有使用var

var mod = 3;
var old_array = ["1","2","3","4","5"];
var new_array = [];

for (var i = 0; i < mod; i++)
{
    new_array[i] = [];
}

for (var i = 0; i < old_array.length; i++)
{
    new_array[old_array[i] % mod].push(old_array[i]);
}

答案 4 :(得分:0)

几乎就在那里。您只需将子数组添加到new_array

var old_array = ["1","2","3","4","5"];
var new_array = [[], [], []]

for(i=0; i<old_array.length; i++)
{
    new_array[i%3].push(old_array[i]);
}