js數組去重的方法總結
一、普通的方法去重
1、簡單的去重方法
// 最簡單數組去重法
/*
* 新建一新數組,遍歷傳入數組,值不在新數組就push進該新數組中
* IE8以下不支持數組的indexOf方法
*/
function uniq(array){
var temp = []; //一個新的臨時數組
for(var i = 0; i < array.length; i++){
if(temp.indexOf(array[i]) == -1){
temp.push(array[i]);
}
}
return temp;
}
var newArray = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(newArray));// [1, 2, 4, 9, 6, 7, 5, 3]
/*
var newArray = ['mu','zi','dig','big','z','mu','zi','muzidigbig']
console.log(uniq(newArray));//["mu", "zi", "dig", "big", "z", "muzidigbig"]
*/

2、數組下標法
/*
* 還是得調用“indexOf”性能跟方法1差不多,
* 實現思路:如果當前數組的第i項在當前數組中第一次出現的位置不是i,
* 那么表示第i項是重復的,忽略掉。否則存入結果數組。
*/
function uniq(array){
var temp = [];
for(var i = 0; i < array.length; i++) {
//如果當前數組的第i項在當前數組中第一次出現的位置是i,才存入數組;否則代表是重復的
if(array.indexOf(array[i]) == i){
temp.push(array[i])
}
}
return temp;
}
var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));//[1, 2, "2", 4, 9, "a", 3, 5, 6]
3、排序后相鄰去除法
/*
* 給傳入數組排序,排序后相同值相鄰,
* 然后遍歷時,新數組只加入不與前一值重復的值。
* 會打亂原來數組的順序
*/
function uniq(array){
array.sort();
console.log(array.sort());
var temp=[array[0]];
for(var i = 1; i < array.length; i++){
if( array[i] !== temp[temp.length-1]){
temp.push(array[i]);
}
}
return temp;
}
var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));//[1, "2", 2, 3, 4, 5, 6, 9, "a"]
4、優(yōu)化遍歷數組法
// 思路:獲取沒重復的最右一值放入新數組
/*
* 推薦的方法
* 方法的實現代碼相當酷炫,
* 實現思路:獲取沒重復的最右一值放入新數組。
* (檢測到有重復值時終止當前循環(huán)同時進入頂層循環(huán)的下一輪判斷)
*/
function uniq(array){
var temp = [];
var index = [];
var l = array.length;
for(var i = 0; i < l; i++) {
for(var j = i + 1; j < l; j++){
if (array[i] === array[j]){
i++;
j = i;
}
}
temp.push(array[i]);
index.push(i);
}
console.log(index);//[0, 2, 5, 6, 7, 8, 9]
return temp;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(uniq(aa));// [1, 2, 3, 6, 5, "3", "muzi"]
5.數組includes()去重
//利用數組原型對象上的includes方法
function unique(arr){
var bArr= [];
for(var i=0; i<arr.length; i++){
if( !bArr.includes(arr[i]) ){ // 如果bArr新數組包含當前循環(huán)item
bArr.push(arr[i]);
}
}
return bArr;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(unique(aa))//[1, 2, 3, 5, 6, "3", "muzi"]
6.數組原型對象上的filter和includes方法
//利用數組原型對象上的filter和includes方法
function unique6(arr){
var bArr= [];
bArr= arr.filter(function(item){
return bArr.includes(item) ? null : bArr.push(item);
});
return bArr;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(unique6(aa))//[1, 2, 3, 5, 6, "3", "muzi"]
7.數組原型對象上的forEach和includes方法
//利用數組原型對象上的forEach和includes方法
function unique7(arr){
var bArr= [];
arr.forEach(function(item){
bArr.includes(item) ? null : bArr.push(item);
});
return bArr;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(unique7(aa))//[1, 2, 3, 5, 6, "3", "muzi"]
二、原型對象去重
方法一:
思路:1)構建一個臨時數組存放結果;
2)循環(huán)遍歷當前數組,判斷當前數組下標為i的元素是否已經保存在臨時數組,如果已保存,則跳過,否則將此元素保存到臨時數組中。
Array.prototype.method1 = function(){
var arr=[]; //定義一個臨時數組
for(var i = 0; i < this.length; i++){ //循環(huán)遍歷當前數組
//判斷當前數組下標為i的元素是否已經保存到臨時數組
//如果已保存,則跳過,否則將此元素保存到臨時數組中
if(arr.indexOf(this[i]) == -1){
arr.push(this[i]);
}
}
return arr;
};
var arrNum1 = [1,4,1,1,3,3,4,6,7,8,3,7,0,2,11,2,'muzi','digbig','muzi'];
console.log(arrNum1.method1());//[1, 4, 3, 6, 7, 8, 0, 2, 11, "muzi", "digbig"]
三、es6去重
let arr = [1,2,2,3,4,4,4];
let s = new Set(arr);
//結果:Set {1,2,3,4}
let newArr = Array.from(s);
//結果:[1,2,3,4],完成去重

若有不足請多多指教!希望給您帶來幫助!
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
- js數組去重的常用方法總結
- JS實現數組去重方法總結(六種方法)
- js數組去重的5種算法實現
- 高性能js數組去重(12種方法,史上最全)
- 史上最全JavaScript數組去重的十種方法(推薦)
- js實現數組去重、判斷數組以及對象中的內容是否相同
- JavaScript數組去重的兩種方法推薦
- JS實現的合并多個數組去重算法示例
- JS實現的JSON數組去重算法示例
- JavaScript數組去重的五種方法
- js算法中的排序、數組去重詳細概述
- JS實現數組去重,顯示重復元素及個數的方法示例
- 兩個數組去重的JS代碼
- JS實現數組去重及數組內對象去重功能示例
- JS實現的字符串數組去重功能小結
- JS實現字符串去重及數組去重的方法示例
- 關于js數組去重的問題小結
- JS數組去重的常用4種方法
相關文章
JavaScript判斷變量是否為undefined的兩種寫法區(qū)別
這篇文章主要是對JavaScript判斷變量是否為undefined的兩種寫法區(qū)別進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12
js中Object.defineProperty()方法的不詳解
這篇文章主要介紹了js中Object.defineProperty()方法的不詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
你必須知道的Javascript知識點之"this指針"的應用
本篇文章小編為大家介紹,你必須知道的Javascript知識點之"this指針"的應用。需要的朋友參考下2013-04-04
百度地圖JavascriptApi Marker平滑移動及車頭指向行徑方向
本文主要介紹了百度地圖JavascriptApi Marker平滑移動及車頭指向行徑方向的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03
JavaScript實現實時更新系統(tǒng)時間的實例代碼
本文給大家分享javascript實現實時更新系統(tǒng)時間的實例代碼,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-04-04

