1

阿洛

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

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

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. 我不喜欢我的代码在我不知道原因的情况下做事。

有人对它为什么这样做有任何想法吗?我放了一个二维数组,我想要一个二维数组。

4

2 回答 2

0

您可以从此答案中获取脚本并使用map它:

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

演示: http: //jsbin.com/ayepeh/1/edit (ctrl + enter 刷新)

于 2013-01-26T08:13:25.300 回答
0

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

确保首先计数一个 int。

于 2013-01-26T08:25:50.253 回答