第一种(splice)
let arr = [1, 5,6,5];
function unique(arr) {
for (let i = 0, len = arr.length; i < len; i++) {
for (let j = i + 1, len = arr.length; j < len; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--; // 每删除一个数j的值就减1
len--; // j值减小时len也要相应减1(减少循环次数,节省性能)
// console.log(j,len)
}
}
}
return arr;
}
console.log(unique(arr));
第二种(indexOf)
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1。
var arr = [1, 5, 6, 5];
function unique(arr){
var arr1 = []; // 新建一个数组来存放arr中的值
for(var i=0,len=arr.length;i<len;i++){
if(arr1.indexOf(arr[i]) === -1){ // 判断arr1是否有该值arr[i]
arr1.push(arr[i]);
}
}
return arr1;
}
console.log(unique(arr));
或
var arr = [1, 5, 6, 5];
function unique(arr){
var arr1 = []; // 新建一个数组来存放arr中的值
for(var i=0,len=arr.length;i<len;i++){
if(arr.indexOf(arr[i]) == i){ // 判断arr[i]该值是否第一次出现
arr1.push(arr[i]);
}
}
return arr1;
}
console.log(unique(arr));
第三种(includes)
var arr = [1, 5, 6, 5];
function unique( arr ){
var arr1 = [];
for(var i=0,len=arr.length;i<len;i++){
if( !arr1.includes( arr[i] ) ){ // 检索arr1中是否含有arr中的值
arr1.push(arr[i]);
}
}
return arr1;
}
console.log(unique(arr));
第四种(filter)
var arr = [1, 5, 6, 5];
function unique( arr ){
// 如果新数组的当前元素的索引值 == 该元素在原始数组中的第一个索引,则返回当前元素
return arr.filter((item,index) => {
return arr.indexOf(item,0) === index;
});
}
console.log(unique(arr));
第五种(Map)
/*创建一个空Map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到Map中。由于Map中不会出现相同的key值,所以最终得到的就是去重后的结果 */
var arr = [1, 5, 6, 5];
function unique(arr) {
let map = new Map();
console.log(map)
//let arr1 = new Array(); // 数组用于返回结果
let arr1 = []
for (let i = 0, len = arr.length; i < len; i++) {
if (map.has(arr[i])) { // 判断是否存在该key值
map.set(arr[i], true);
}
else {
map.set(arr[i], false);
arr1.push(arr[i]);
}
}
return arr1;
}
console.log(unique(arr));
第六种(Set)
var arr = [1, 5, 6, 5];
console.log(...new Set(arr));
第七种(递归)
var arr = [1, 5, 6, 5];
function unique(arr) {
var array= arr;
var len = array.length;
array.sort(function(a,b){ //排序后更加方便去重
return a - b;
})
function loop(index){
if(index >= 1){
if(array[index] === array[index-1]){
array.splice(index,1);
}
loop(index - 1); //递归loop,然后数组去重
}
}
loop(len-1);
return array;
}
console.log(unique(arr))