第一种:两层遍历,使用indexOf
//第一种方法:两次遍历,时间复杂度为O(n2)
function del(arr){
let result = [];
for(let i = 0;i < arr.length;i++){
if(result.indexOf(arr[i]) == -1){
result.push(arr[i]);
}
}
return result;
}
第二种:利用json的键值对,类似于哈希法
function del(arr) {
let obj = {};
let arr1 = [];
for(let i = 0;i < arr.length;i++){
//JS中key的存放都是以字符串的形式,所以要用typeof来区分数字和字符串,从而进行存放
key = typeof (arr[i]) + "_" + arr[i];
if(!obj[key]){
obj[key] = true;
arr1.push(arr[i]);
}
}
return arr1;
}
第三种:先用sort排序,再和前面一个数进行比较
function del(arr) {
arr.sort();
for(let i = 0;i < arr.length;i++){
//这里要用===,因为==会把字符串和数字看成相等
if(arr[i] === arr[i + 1]){
//将第i+1个数从数组中删除
arr.splice(i + 1,1);
//数组的大小减了,所以遍历的时候要往回退一位,不然会错过一个数的判断
i--;
}
}
return arr;
}
第四种:ES6中的Set
function del(arr) {
let x = new Set(arr);
return [...x];
}
测试用例
let arr = [1,2,2,2,2,'2','2',3,'3','4'];
console.log(del(arr));