如何在javascript中进行固定随机排序?

时间:2018-04-15 06:06:39

标签: javascript sorting random

是否有任何函数按固定随机顺序对数组进行排序

例如:

array={"a","b","c","d","e"}

随机排序列表应该是这样的

array={"b","d","a","c","e"}

主要想法:如果我重新启动我的应用程序,列表应该是固定的

array={"b","d","a","c","e"}

4 个答案:

答案 0 :(得分:0)

您可以使用hash函数创建伪随机排序。使用this hash function给出了一个示例,但您可以使用任何您想要的哈希函数:

const hashCode = str => str.split('').reduce((prevHash, currVal) =>
  (((prevHash << 5) - prevHash) + currVal.charCodeAt(0)) | 0, 0) % 100;

const data = ["a", "a", "c", "b", "bb", "car", "dog", "apple", "aaaaaple"];

const compare = (a, b) => hashCode(a) - hashCode(b);

data.sort(compare);
console.log(data);

此特定实现将返回

每次

[ 'apple', 'bb', 'dog', 'car', 'aaaaaple', 'a', 'a', 'b', 'c' ]

答案 1 :(得分:0)

如果每次重启应用程序时都需要随机数组。尝试:

var anyArray = new Array("google.com", "yahoo.com" , "a", "c");
var length = anyArray.length;
var usedNums = new Array(4);
function sort (){
    for(i=0;i<length;i++){
        var newOrder;
        do{
        newOrder = getNewNum();
    }
    while(usedNums[newOrder]);

    usedNums[newOrder] = anyArray[i];
    }
    alert(usedNums);


}

function getNewNum(){
    return Math.floor(Math.random()*length);
}
window.onload= sort;

答案 2 :(得分:0)

这是我想要的解决方案,非常简单:)

shuffle() {
    for(int i=0; i<this.tempList.length/2; i++){
        var l1=[]; var l2=[];
        for(int j=0; j<this.tempList.length; j++){
            if(j%2==1){l1.push(this.tempList[j]);}else{l2.push(this.tempList[j]);}
        }
        this.tempList=l1.concat(l2);
    }
};

答案 3 :(得分:0)

查找任何接受种子的伪随机生成器,并且每次使用相同的种子来获得相同的数字序列。 例如Seeding the random number generator in Javascript

var seed = 1;          // pick the same seed every time
function random() {
    var x = Math.sin(seed++) * 10000;
    return x - Math.floor(x);
}

var array = [ "a", "b", "c", "d", "e" ]

array.sort( random )

console.log( array + '' ) // "e,d,c,b,a"