在JavaScript中混洗数组值

时间:2014-02-20 00:10:10

标签: javascript arrays shuffle

让我们考虑一下我有以下几个字符:

H, M, L

我想创建如下所示的排序数组:

var array1 = [ "H", "M", "L", "L", "M", "H" ];

当我shuffle()数组时,我不想要的是包含多个唯一字符的前三个和后三个字符。

e.g。

var wrong = [ "H", "M", "M", "H", "M", "L" ]; // note the two M's in the first three values

如果我使用shuffle(),请执行以下操作:

var array2 = array1.shuffle();然后我冒着重复字符的风险。

我想帮助确定一种最简单的方法来确保数组中第一个和第二个三个值中没有重复的字符?

编辑:将随机更改为已排序。

2 个答案:

答案 0 :(得分:1)

在原型上或作为独立的

创建您的随机播放

function shuffle(obj) {
  var i = obj.length;
  var rnd, tmp;

  while (i) {
    rnd = Math.floor(Math.random() * i);
    i -= 1;
    tmp = obj[i];
    obj[i] = obj[rnd];
    obj[rnd] = tmp;
  }

  return obj;
}


var a = ['H', 'M', 'L'],
  b = shuffle(a.slice()).concat(shuffle(a.slice()));

console.log(b);

答案 1 :(得分:0)

由于 @ Xotic750 的回答,我最终得到了类似的东西。

Array.prototype.shuffle = function() {
  var i = this.length, j, temp;
  if ( i == 0 ) return this;
  while ( --i ) {
     j = Math.floor( Math.random() * ( i + 1 ) );
     temp = this[i];
     this[i] = this[j];
     this[j] = temp;
  }
  return this;
}

var array = [ "H", "M", "L" ];
var b = array.slice().shuffle().concat(array.slice().shuffle());

JSFiddle输出。