数组去重和随机排序是面试常考的知识点,掌握这两种方法对于自己的面试有会有一定的帮助,所以今天就来介绍一下这两种方法。
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]; let 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 = []
for (var j in res) {
arr.push(j)
}
return arr.join('') //从小到大
// return [...arr.reverse()].join('') //从大到小
}
console.log( removeRepeat ())
如果你也有其他的方法,可以在下方留言,一起交流学习