Array随机添加维度

时间:2013-01-26 08:06:37

标签: javascript arrays push slice

异体'

我正在研究我的一个小项目,其中一部分涉及采用已创建的二维数组并将其随机化。

所以我有一些看起来像这样的东西:

foo = [[1,2],[3,4],[5,6],[7,8]];

randomizeFoo = function(){ 
    var randomizedFoo = [];
    newFoo = foo;
    for(i = 0; i < newFoo.length; i++){
        count = Math.random() * newFoo.length;
        randomizedFoo.push(newFoo.slice(count, count + 1));
    }
    return randomizedFoo; 
};

这确实使数组随机化,但最终得到的结果如下:

randomizedFoo = [[[7,8]],[[1,2]],[[5,6]],[[3,4]]]

我漂亮的整洁2D阵列现在是一个3D阵列,最低级别的阵列现在在额外的级别下磨损。我意识到这不是什么大不了的事,其余的代码只需要补偿,但它有两个原因让我烦恼:

  1. 这是额外的复杂性,而且永远不会好。
  2. 我不喜欢我的代码在没有我知道原因的情况下做事。
  3. 任何人都有任何想法为什么这样做?我放了一个2D数组,我想要再次退出2D数组。

2 个答案:

答案 0 :(得分:0)

您可以从this answer获取脚本并使用map

foo = range(0, foo.length-1, true).map(function(i) {
  return foo[i];
});

演示: http://jsbin.com/ayepeh/1/edit(按住Ctrl键进入刷新状态)

答案 1 :(得分:0)

这是因为你正在使用切片。只需使用count作为foo的索引。如:randomizedFoo.push(foo [count]);

确保先计算一个int。