是否有任何函数按固定随机顺序对数组进行排序
例如:
array={"a","b","c","d","e"}
随机排序列表应该是这样的
array={"b","d","a","c","e"}
主要想法:如果我重新启动我的应用程序,列表应该是固定的
array={"b","d","a","c","e"}
答案 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"