(1)方法一
①利用es6中set容器的特點:set容器是無序不可重復(fù)的多個value的集合體紊扬,將數(shù)組作為參數(shù)傳入會自動去重
②循環(huán)遍歷 for(let value of target){},可遍歷數(shù)組梭冠,set容器臀突,map容器纯出,字符串滥沫,偽數(shù)組
let arr = [1,2,3,3,4,4,5,6,6,7]
let arr1 = arr;
arr = [];
let set2 = new Set(arr1);
for(let i of set2){
arr.push(i);
}
console.log(arr);// [1, 2, 3, 4, 5, 6, 7]
(2)方法二
Array.from(v) : 將偽數(shù)組對象或可遍歷對象轉(zhuǎn)換為真數(shù)組
let arr = [3,3,4,5,6,1,3,5,5,6,1]
arr = Array.from(new Set(arr));
console.log(arr);// [3, 4, 5, 6, 1]
(3)方法三
三點運算符內(nèi)部使用for...of循環(huán)
let arr = [3,3,4,5,6,1,3,5,5,6,1]
let arr1 = [...new Set(arr)];
console.log(arr1); //[3, 4, 5, 6, 1]
(4)方法四
reduce函數(shù)的特點
let arr = [1,2,3,4,4,1]
let arr1 = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(arr1);// [1, 2, 3, 4]
(5) 方法五
該方法取每一項和剩下的作對比松靡,如果剩下的數(shù)組存在此項狐榔,則刪除該項(或變成null再刪除數(shù)組中值為null的項[代碼內(nèi)注釋①])
使用的數(shù)組方法:
① arrayObject.slice(start,end:可不傳) 坛增,返回一個新的數(shù)組,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素,該方法并不會修改數(shù)組薄腻,而是返回一個子數(shù)組收捣。。
② arrayObject.splice(index,howmany,item1,.....,itemX)庵楷,方法向/從數(shù)組中添加/刪除項目罢艾,然后返回被刪除的項目,該方法會改變原數(shù)組尽纽。
let arr = [3,3,4,5,6,1,3,5,5,6,1]
for(let i = 0;i<arr.length-1;i++){
let item = arr[i],
args = arr.slice(i+1)
if(args.includes(item)){
//① arr[i] = null
arr.splice(i,1)
i--
}
}
//① arr = arr.filter(item => item!=null)
console.log(arr)// [4, 3, 5, 6, 1]
(6)方法六
該方法是方法五的修改版咐蚯,思路是取每一項和剩下的作對比,如果剩下的數(shù)組存在此項弄贿,則將數(shù)組最后一項與他替換
let arr = [3,3,4,5,6,1,3,5,5,6,1]
for(let i = 0;i<arr.length;i++){
let item = arr[i],
args = arr.slice(i+1)
if(args.includes(item)){
arr[i] = arr[arr.length-1]
arr.length--
i--
}
}
console.log(arr)
(7)方法七
就是簡單的循環(huán)套循環(huán)遍歷對比
function way1(arr){
var arr1 = [arr[0]];
for(var i = 1;i<arr.length;i++){
var repeat = false;
for(var j = 0;j<arr1.length;j++){
if(arr[i] === arr1[j]){
repeat = true;
break;
}
}
if(!repeat){
arr1.push(arr[i])
}
}
return arr1;
}
(8)方法八
先排序春锋,取出新的值與相鄰的值進(jìn)行對比
function way2(arr){
var arr2 = arr.sort();
var arr3 = [arr2[0]];
for(var i=1; i<arr2.length; i++){
if(arr2[i] !== arr3[arr3.length-1]){
arr3.push(arr2[i]);
}
}
return arr3;
}
(9)方法九
利用json對象的特點
function way3(arr){
var obj = {},
arr1 = [];
for(var i = 0;i < arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]] = 1;
arr1.push(arr[i]);
}
}
return arr1;
}
(10)方法十
利用數(shù)組的indexOf方法,調(diào)用時差凹,若參數(shù)在該數(shù)組中存在期奔,則返回該參數(shù)在數(shù)組中的下標(biāo)位置侧馅。
注:此處參數(shù)與數(shù)組中的元素對比,嚴(yán)格采用“===”進(jìn)行對比呐萌,即不做隱式的數(shù)據(jù)類型轉(zhuǎn)換
function way4(arr){
var arr1 = [];
for(var i=0; i<arr.length; i++){
if(arr1.indexOf(arr[i]) == -1){
arr1.push(arr[i]);
}
}
return arr1;
}