混合(或排序)JS数组

时间:2017-05-30 11:05:23

标签: javascript arrays sorting

我有唯一的数组:

[0, 1, 2, 3, 4, 5, 6, 7, 8]

"上半场"数组的数据是[0,1,2,3,4],第二个是[5,6,7,8]。

现在我应该得到这样的东西(它不是随机混合)

[0, 5, 1, 6, 2, 7, 3, 8, 4]

这是两列的数据数组。我应该将前半部分数据放在第一列中,将第二部分放在第二列中。

我试图找到一个简单的解决方案......感谢您的建议!

3 个答案:

答案 0 :(得分:3)

您可以split使用Math.ceil对数组进行var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8], c = 1 var half = arr.splice(Math.ceil(arr.length / 2)) half.forEach(e => (arr.splice(c, 0, e), c += 2)) console.log(arr)舍入数字,然后循环第一部分,并将第二部分递增计数器中的每个元素加2。



{{1}}




答案 1 :(得分:1)

使用map和内联if语句

尝试以下操作



    var array = [0,1,2,3,4,5,6,7,8]
    var result = array.map(function(item,index){
      return (index%2 == 0) ? array[index/2] :  array[Math.floor((index+array.length)/2)];
    });
    console.log(result);




答案 2 :(得分:0)

您可以计算索引并映射数组中的值。

(i >> 1) + ((i & 1) * ((a.length + 1) >> 1))
^^^^^^^^                                     take the half integer value
            ^^^^^^                           check for odd
                          ^^^^^^^^^^^^       adjust length
                       ^^^^^^^^^^^^^^^^^^^^  the half value of adjusted length



var array = [0, 1, 2, 3, 4, 5, 6, 7, 8],
    result = array.map((_, i, a) => a[(i >> 1) + ((i & 1) * ((a.length + 1) >> 1))]);

console.log(result);

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