js面试题3:如何实现数组随机排序?

924 阅读1分钟

1. 利用sort方法

例如为array数组排序可以使用如下方法,比较的原理为如果a-b > -1 ,则a排在b前面,否则a排在b后面

  let arr=[1,12,34,5,6];
  arr.sort((a,b)=>a-b);
  console.log('arr',arr);// 返回[1, 5, 6, 12, 34]

所以,实现数组的随机排序,我们可以随机生成一个0-1之间的数跟0.5相比较,如果大于0.5则返回-1,否则返回1;

  let arr=[1,'12m',34,'we','5uw','w6'];
  const randomSort=()=>{
      return Math.random() > 0.5 ? -1 : 1;
  }
  arr.sort(()=>randomSort());
  console.log('arr',arr);

2.创建一个新的数组,从原数组中随机抽取一个元素插入到新数组中,然后返回新数组

let arr=[1,'12m',34,'we','5uw','w6'];
const randomSort=(origin_array)=>{
  // 先拷贝一份到临时数组里
  let temp_array = origin_array.map(item=>item);
  let result_array=[];
  while(temp_array.length) {
     // 随机生成[0,temp_array.length)之间的整数
     let randomIndex = Math.floor(Math.random()*temp_array.length);
     console.log('randomIndex',randomIndex);
     result_array.push(temp_array[randomIndex]);
     temp_array.splice(randomIndex,1);
   }
   return result_array;
}
const result = randomSort(arr);
console.log('result',result);

3.数组内的元素随机替换位置(类似洗牌算法)

let arr=[1,'12m',34,'we','5uw','w6'];
const randomSort=(origin_array)=>{
    let len = origin_array.length;
    let temp='';
    let randomIndex=0;
	for(let i=0;i<len;i++) {
    	//随机生成[i,len)的随机整数
        randomIndex = Math.floor(Math.random()*(len-i)+i);
        temp = origin_array[i];
        origin_array[i] = origin_array[randomIndex];
        origin_array[randomIndex] = temp;
    }
    return origin_array;
}
let result = randomSort(arr);
console.log('result',result)