iT邦幫忙

2

[筆記]Javascript陣列移除重複方法效能比較(是否有更快的作法?)

舜~ 2019-09-10 10:57:032499 瀏覽

(資料源放在最下方)
不重複數量為170個

參考方法:來源

方法一: 28ms,(ps.出來的結果是物件)

var startTime = Date.now();
var result3 = tmp.reduce((obj, item) => {
                obj[item] = 1;
                return obj;
              }, {});
console.log(`${Date.now() - startTime} ms`);

方法二: 44ms

var startTime = Date.now();
var result2 = [...(new Set(tmp))];
console.log(`${Date.now() - startTime} ms`);

方法三: 53ms

var startTime = Date.now();
var result = Array.from(new Set(tmp));
console.log(`${Date.now() - startTime} ms`);

方法四: 88ms

var startTime = Date.now();
var result4 = tmp.filter(function(element, index, arr){
    return arr.indexOf(element) === index;
});
console.log(`${Date.now() - startTime} ms`);

資料源

function SetData(){
    var tmp = ['','','動力機械','塗裝技術','機車修護','汽機車技術','汽車','汽車修護','汽車技術','汽車電機','軌道車輛','農業機械','重機','飛機修護','','化工','化工技術','染整','紡織','','商業','商業事務','商業服務','商業經營','商用資訊','國際貿易','多媒體技術','廣告技術','文書處理','會計事務','流通管理','航運管理','資料處理','資訊應用','資訊處理','銷售事務','電子商務','','土木','土木建築技術','建築','建築技術','建築製圖','消防工程','營建技術','營造技術','空間測繪','電腦繪圖','','應用日語','應用英語','','家政','幼兒保育','時尚模特兒','時尚設計','時尚造型','服裝','服裝設計','流行服飾','照顧服務','美容','美容美髮','美顏技術','美髮技術','','板金','模具','模具技術','機械','機械修護','機械加工','機械技術','機械木模','機電','生物產業機電','製圖','配管','鑄造','電腦機械製圖','電腦繪圖','電腦製圖','電腦輔助機械','','休閒漁業','水產養殖','水產養殖技術','漁業','','漁業','航海','船舶機電','輪機','','無','','其他','綜合職能','銀髮族活動管理','','美容造型','美顏技術','美髮技術','美髮造型','','原住民藝能','國樂','多媒體動畫','影劇','影視戲劇','戲劇','時尚工藝','美術','舞蹈','表演技術','表演藝術','西樂','電影電視','音樂','','商業設計','圖文傳播','多媒體應用','多媒體製作','多媒體設計','室內空間設計','室內設計','家具木工','家具設計','廣告技術','廣告設計','服裝製作','美工','美工技術','美工電腦設計','裝潢技術','視覺傳達設計','金屬工藝','','休閒農業','園藝','園藝技術','園藝與休閒','寵物經營','森林','畜產保健','茶葉技術','農場經營','農業技術','造園','造園技術','野生動物保育','','冷凍空調','冷凍空調技術','家電技術','微電腦修護','控制','水電技術','航空電子','視聽電子修護','資訊','資訊技術','資訊電子','電子','電子技術','電機','電機修護','電機技術','電機空調','電機電子','電機電子技術','','水產食品','烘焙','烘焙食品','食品','食品加工','食品技術','食品經營','','中餐廚師','休閒事務','旅遊事務','烹調技術','觀光事務','觀光事業','觀光餐飲','運動與休閒管理','食品烘焙','餐飲技術','餐飲服務','餐飲管理'];
    tmp=tmp.concat(tmp); // 刻意增加重複並放大數量
    tmp=tmp.concat(tmp);
    tmp=tmp.concat(tmp);
    tmp=tmp.concat(tmp);
    tmp=tmp.concat(tmp);
    tmp=tmp.concat(tmp);
    tmp=tmp.concat(tmp);
    tmp=tmp.concat(tmp);
    tmp=tmp.concat(tmp);
    tmp=tmp.concat(tmp);
    tmp=tmp.concat(tmp);
    // 共有395264個元素
    return tmp;
}


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
dragonH
iT邦超人 5 級 ‧ 2019-09-10 11:20:23

我比較常用 Set

其實可以寫像這樣

應該會比較好懂

const startTime = Date.now();
const result2 = [...new Set(tmp)];
console.log(`${Date.now() - startTime} ms`)
舜~ iT邦高手 1 級 ‧ 2019-09-10 12:00:07 檢舉

嗯嗯,感恩建議,晚點調整~~
話說設定與不設定中斷點的速度差距意外的大XD

我要留言

立即登入留言