2013-08-30 128 views
1

我想随机洗牌一个烬阵列没有太大的成功。Ember.js洗牌阵列

到目前为止,我用这个片段洗牌数组:

Array.prototype.shuffle = function() { 
    var len = this.length; 
    var i = len; 
    while (i--) { 
     var p = parseInt(Math.random()*len,10); 
     var t = this[i]; 
     this[i] = this[p]; 
     this[p] = t; 
    } 
}; 

而且这个片段来比较两个数组:

Array.prototype.compareTo = function (array2){ 
    var array1 = this; 
    var difference = []; 
    $.grep(array2, function(el) { 
     if ($.inArray(el, array1) == -1) difference.push(el); 
    }); 
    if(difference.length === 0){ 
     var $i = 0; 
     while($i < array1.length){ 
      if(array1[$i] !== array2[$i]){ 
       return false; 
      } 
      $i++; 
     } 
     return true; 
    } else { 
     return false; 
    } 
} 

我用这个,只要它是洗牌我的数组与我开始时相同:

while(array1.compareTo(array2) === true){ 
    array1.shuffle(); 
} 

但是这个循环是一个无限循环,我似乎无法找到o为什么...

感谢您的时间。

+0

看看这个:http://stackoverflow.com/questions/2450954/how-to-randomize-a-javascript-array –

回答

1

您正在将数组进行混洗,然后通过参考自身进行比较。这导致了无限循环。

在循环之前,请制作array1的副本。 Underscore.js是一个很好的库,它有这个built in

var array2 = _.clone(array1); 
while(array1.compareTo(array2) === true){ 
    array1.shuffle(); 
} 

值得一提的是,Underscore.js也有自己的实现shuffle。它的工作方式不同。它没有适当的洗牌。

+0

我改变它为: var shuffledAnswers = answers.slice(); 现在,数组由 进行比较,非常感谢! – Dries