Ember.js随机播放阵列

时间:2013-08-30 11:20:12

标签: jquery 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();
}

然而,这个循环是一个无限循环,我似乎无法找出原因......

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

您将阵列移动到位,然后通过引用自身进行比较。这导致无限循环。

在循环之前,请复制array1。 Underscore.js是一个很好的库,有built in

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

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