1、中规中举的:算法复杂度O(n^2)
function unique() {
let arr = [1,1,1,2,3,2,2,4,5,6,7];
for (let i = 0; i < arr.length; i++) {
for (let j = i+1; j < arr.length; j++) {
if (arr[i] === arr[j]){
arr.splice(j,1);
j--;
}
}
}
console.log(arr)
}
2. 一个for循环的:算法复杂度O(n)
function unique() {
let arr = [1,1,1,2,3,2,2,4,5,6,7];
let rs = [];
for (let i = 0; i < arr.length; i++) {
if (rs.indexOf(arr[i])===-1) {
rs.push(arr[i]);
}
}
console.log(rs)
}
3. 高阶函数filter, 类似于(2),反向思维, 利用arr.indexOf(item)返回首次的下标,很聪明
function unique() {
let arr = [1,1,1,2,3,2,2,4,5,6,6,7,1];
let res = arr.filter((item,index)=>{
return arr.indexOf(item) === index;
})
console.log(res)
}
4.利用key-value,查找速度快,滋滋...
function unipue() {
let arr = [1,1,1,2,3,2,2,4,5,6,6,7,1];
let tag ={};
let res = [];
for (let i = 0; i < arr.length; i++) {
if (!tag[arr[i]]){
res.push(arr[i]);
tag[arr[i]] = true;
}
}
console.log(res)
}
5.高级特性:不用怎么写代码了
function unique() {
let arr = Array.from({length:20},()=> Math.random()*10|0) // 随机生个数组看看😆
let rs = Array.from(new Set(arr))
console.log(rs);
}
6.更高级特性,利用Set特性,代码都不用写了
function unique() {
let arr = Array.from({length:20},()=> Math.random()*10|0) // 随机生个数组看看
console.log([...new Set(arr)]);😝
}
还有没有更妙的?