javascript三种数组去重和三种随机排序方法,面试必考题

人生第一次写技术博客,很少写技术博客,因为技术不咋地,也因为懒。
数组去重和随机排序是面试常考的知识点,掌握这两种方法对于自己的面试有会有一定的帮助,所以今天就来介绍一下这两种方法。

1.随机排序

1.1.第一种

let array = [1,2,5,6,3,9]    

let res = [];    

let len = array.length;    

let {random,floor} = Math;    

for (let i = 0; i < len; i++) {      

  let j = floor(random() * array.length);          //取到随机数

  res[i] = array[j];                   //把array 数组的随机数赋给另一个数组

  array.splice(j,1)   

  }    

console.log(res)

1.2 第二种大概差不多,但是要麻烦不少。

let arr = [1, 5, 6, 9, 8, 5],res = []; 

let len = arr.length;

let { floor, random } = Math

res.push('.') 

for (let i = 0; i < len; i++) {  

   j = floor(random() * arr.length); 

if (String(res).charAt(j) === '.') break;   
else { 
   res.push(arr[j])
 }
  arr.splice(j, 1) 
}
let p = res.slice(res.indexOf('.') + 1)

console.log(p); 

1.3 这种排序法最好,语法简洁,易懂明了;

let deck = [1,2,3,6,5,8,9,5], len = deck.length;

let {random,floor} = Math;

function shuffle() {

  for (let i = len - 1; i > 0; i--) {  

  let r =floor(random() * (i + 1)) ; 

 [deck[i],deck[r]] = [deck[r], deck[i]]  // 交换数值

}

return deck;  

};

console.log(shuffle());



2 数组去重

2.1 学过es6的都会这种方法

let arr = [1, 2, 5, 9, 6, 5, 5, 6, 9, 8, 4, 8, 3, 6, 9, 5]

console.log([...new Set(arr)])

2.2 这种方法关键点在于要知道indexOf只返回第一个符合的数值(不指定的情况下)

  function removeRepeat(arr) { 

     return arr.filter(function (item, index, self) { 
       return self.indexOf(item) === index; 
    }  
  )
  console.log(removeRepeat())

2.3 这种方法比较全面,因为不仅解决了数组去重,还顺便解决了数组(仅限数字)排序,就是有点麻烦

var res = { }

function removeRepeat () { 
  for(let i = 0; i < array.length; i++) {

   if (`${array[i]}` in res) continue;

   else { 
    res[array[i]] = 1         // 1 这个数字随便写的,不影响结果
   }
 } 

let arr = [] 
arr.push(...Object.keys(res))        //需要babel编译

return arr.join('<')   //从小到大
//  return [...arr.reverse()].join('>')  //从大到小
} 
console.log( removeRepeat ())

如果你也有其他的方法,可以在下方留言,一起交流学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值