在JavaScript中将Concat多个混洗数组转换为一个大的随机数组

时间:2014-05-18 12:19:05

标签: javascript jquery arrays shuffle

我有一些数组,想要使用shuffle(as explained here

随机化它们

但是,我希望我的所有数组都连接成一个大数组,然后逐个遍历数组。

现在我注意到了这个:

var proxies =   [
        {stim: A},
        {stim: B},
        {stim: C},
        {stim: D}]
var a = shuffle(proxies); var b = shuffle(proxies); var c = shuffle(proxies);
var x = a.concat(b, c)

也不是:

var x = shuffle(proxies).concat(shuffle(proxies), shuffle(proxies)) 

会生成一个更大的数组,该数组由我的初始代理数组的三个不同的混洗顺序组成。

如果我登录到控制台,我看到对于这两个选项,它总是一次洗牌顺序重复三次。好像它只被洗牌了一次然后依旧保持这种状态。

关于解决这个问题的想法?

2 个答案:

答案 0 :(得分:1)

如果您想使用问题中提到的帖子的功能,您必须稍微修改它。你的代码将是

<script type="text/javascript">
    function shuffle(array) {
      var newarr=[]
      var currentIndex = array.length,
         temporaryValue,
         randomIndex;
      while (0 !== currentIndex) {
        randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex -= 1;
        temporaryValue = array[currentIndex];
        array[currentIndex] = array[randomIndex];
        newarr[currentIndex] = array[randomIndex]
        array[randomIndex] = temporaryValue;

      }

      return newarr;
    }

    var proxies =   [{stim:'a'},{stim: 'b'},{stim: 'c'},{stim: 'd'}]
    var a=shuffle(proxies);
    var b=shuffle(proxies);
    var c=shuffle(proxies);
    var x=a.concat(b, c)
    console.log(x)
</script>

答案 1 :(得分:0)

好像你的shuffle()函数在给定的数组上运行,而不是生成一个新的函数。所以在你的第一个例子中,a,b和c都等于同一个数组。

如果要创建3个唯一的shuffle,则必须在重排和连接之前克隆/复制数组。有很多选择,例如:How do you clone an Array of Objects in Javascript?

相关问题