最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

JavaScript數(shù)組去重的多種方法(四種)

來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:29:31
文檔

JavaScript數(shù)組去重的多種方法(四種)

JavaScript數(shù)組去重的多種方法(四種):數(shù)組去重,一般需求是給你一個數(shù)組,調用去重方法,返回數(shù)值副本,副本中沒有重復元素。一般來說,兩個元素通過 === 比較返回 true 的視為相同元素,需要去重,所以,1 和 1 是不同的元素,1 和 new Number(1) 是不同的元素,{} 和 {} 是不同的元素
推薦度:
導讀JavaScript數(shù)組去重的多種方法(四種):數(shù)組去重,一般需求是給你一個數(shù)組,調用去重方法,返回數(shù)值副本,副本中沒有重復元素。一般來說,兩個元素通過 === 比較返回 true 的視為相同元素,需要去重,所以,1 和 1 是不同的元素,1 和 new Number(1) 是不同的元素,{} 和 {} 是不同的元素

數(shù)組去重,一般需求是給你一個數(shù)組,調用去重方法,返回數(shù)值副本,副本中沒有重復元素。一般來說,兩個元素通過 === 比較返回 true 的視為相同元素,需要去重,所以,1 和 "1" 是不同的元素,1 和 new Number(1) 是不同的元素,{} 和 {} 是不同的元素(引用不同)。(當然如果需求認為 {} 和 {} 算作相同的元素,那么解法就不一樣了)

method 1

使用兩重循環(huán)

function unique(arr) {
 var res = [];
 for(var i = 0, len = arr.length;i < len; i++) {
 var item = arr[i];
 for(var j = 0, jLen = res.length; j<jLen; j++) {
 if(item == res[j]) break;
 }
 if(j == jLen) res.push(item);
 }
 return res;
}

method 2

function unique(arr) {
 var ret = []
 for (var i = 0; i < arr.length; i++) {
 var item = arr[i]
 if (ret.indexOf(item) === -1) {
 ret.push(item)
 }
 }
 return ret
}

這里判斷可以使用一個語法糖

function unique(arr) {
 var res = [];
 for(var i = 0, len = arr.length;i < len; i++) {
 var item = arr[i];
 (res.indexOf(item) === -1) && res.push(item);
 }
 return res;
}

但是在低版本瀏覽器并沒有 indexOf

var indexOf = [].indexOf ?
 function(arr, item) {
 return arr.indexOf(item)
 } :
 function indexOf(arr, item) {
 for (var i = 0; i < arr.length; i++) {
 if (arr[i] === item) {
 return i
 }
 }
 return -1
 }
function unique(arr) {
 var ret = []
 for (var i = 0; i < arr.length; i++) {
 var item = arr[i]
 if (indexOf(ret, item) === -1) {
 ret.push(item)
 }
 }
 return ret
}

method3

使用兩重循環(huán)的另外一種比較方式,前面是將原數(shù)組的元素和結果數(shù)組一一比較,下面我們可以將原數(shù)組的重復元素的最后一個元素放入數(shù)組中

function unique(arr) {
 var ret = [];
 var len = arr.length;
 var isRepeat;
 for(var i=0; i<len; i++) {
 isRepeat = false;
 for(var j=i+1; j<len; j++) {
 if(arr[i] === arr[j]){
 isRepeat = true;
 break;
 }
 }
 if(!isRepeat){
 ret.push(arr[i]);
 }
 }
 return ret;
}

這里還有一個優(yōu)化的版本

function unique(a) {
 var res = [];
 for (var i = 0, len = a.length; i < len; i++) {
 for (var j = i + 1; j < len; j++) {
 // 這一步十分巧妙
 // 如果發(fā)現(xiàn)相同元素
 // 則 i 自增進入下一個循環(huán)比較
 if (a[i] === a[j])
 j = ++i; //j = i = i + 1;
 }
 res.push(a[i]);
 }
 return res;
}

method4

用 javascript 中的 object 對象來當作 哈希表

function dedup(arr) {
 var hashTable = {};
 return arr.filter(function(value,index,arr){
 var key = JSON.stringify(value);
 var match = Boolean(hashTable[key]);
 return (match ? false : hashTable[key] = true);
 });
}

因為 Object 的 key 值都是 String 類型,所以對于 1 和 "1" 無法分別,我們可以稍微改進下,將類型也存入 key 中

function dedup(arr) {
 var ret = [];
 var hash = {};
 for(var i = 0; i < arr.length; i++) {
 var item = arr[i];
 var key = typeof(item) + item;
 if(hash[key] !== 1) {
 ret.push(item)
 hash[key] = 1;
 }
 }
 return ret;
}

總結

以上所述是小編給大家介紹的JavaScript數(shù)組去重的多種方法(四種),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript數(shù)組去重的多種方法(四種)

JavaScript數(shù)組去重的多種方法(四種):數(shù)組去重,一般需求是給你一個數(shù)組,調用去重方法,返回數(shù)值副本,副本中沒有重復元素。一般來說,兩個元素通過 === 比較返回 true 的視為相同元素,需要去重,所以,1 和 1 是不同的元素,1 和 new Number(1) 是不同的元素,{} 和 {} 是不同的元素
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top