方法一:
雙層循環,外層循環元素,内層循環時比較值
如果有相同的值則跳過,不相同則push進數組
function geta(arr) {
var arr2 = [];
for(var i = 0; i < arr.length; i++) {
for(var j = i + 1; j < arr.length; j++) {
if(arr[i] == arr[j]) {
j = ++i;
}
}
arr2.push(arr[i])
}
return arr2;
}
方法二:利用splice直接在原數組進行操作
雙層循環,外層循環元素,内層循環時比較值
值相同時,則删去這個值
注意點:删除元素之後,需要将數組的長度也減1.
function getb(arr) {
var len = arr.length;
for(var i = 0; i < len; i++) {
for(var j = i + 1; j < len; j++) {
if(arr[i] == arr[j]) {
arr.splice(i, 1); //删除已存在的元素
len--; //長度也要減去
j--; //從上一個重新開始
}
}
}
return arr;
}
優點:簡單易懂
缺點:占用記憶體高,速度慢
方法三:利用對象的屬性不能相同的特點進行去重
function getc(arr) {
var obj = {};
var arr2 = [];
var len = arr.length;
for(var i = 0; i < len; i++) {
if(!obj[arr[i]]) { //如果能找到,證明數組元素重複了
obj[arr[i]] = true;
arr2.push(arr[i]);
}
}
return arr2;
}
方法四:數組遞歸去重
運用遞歸的思想
先排序,然後從最後開始比較,遇到相同,則删除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
方法五:利用indexOf
function gete(arr) {
var arr2 = [];
for(var i = 0; i < arr.length; i++) {
if(arr2.indexOf(arr[i]) == -1) {
arr2.push(arr[i])
}
}
return arr2;
}
方法六:利用ES6的set
利用Array.from将Set結構轉換成數組
1 2 3 4 | |
拓展運算符(...)内部使用for...of循環
1 2 3 | |
下面給大家補充介紹合并數組并去重的方法
一、concat()方法
思路:concat() 方法将傳入的數組或非數組值與原數組合并,組成一個新的數組并傳回。該方法會産生一個新的數組。
1 2 3 4 5 | |
二、Array.prototype.push.apply()
思路:該方法優點是不會産生一個新的數組。
1 2 3 4 5 6 7 8 9 10 | |
總結:數組方法去重有多種方法,但有好有壞,具體使用實作還得考慮考慮。