ES6数组去重最佳实践:Set、Map与Reduce方法对比
馃敟
馃専 寮€澶达細浣犺閲嶅鏁版嵁鎼炵柉杩囧悧锛?/h3>
鏈夋病鏈夎瘯杩囨墦寮€浠g爜涓€鐪嬶紝婊″睆閮芥槸閲嶅鐨勫紶涓夋潕鍥涚帇浜旓紵姣斿杩欎釜璁╀汉澶村ぇ鐨勬暟缁勶細
["馃崕","馃崒","馃崕","馃崐","馃崒","馃崌","馃崒"]
鈥?strong>鈥嬫€庝箞蹇€熻姘存灉鎽婂彧鍗栦笉閲嶆牱鐨勶紵鈥?/strong>鈥?浠婂ぉ鍜变滑灏卞敔鍞燛S6涓夊ぇ绁炲櫒锛歋et銆丮ap銆丷educe锛屼繚鍑嗕綘5鍒嗛挓get鍘婚噸鐪熺粡锛?/p>
馃幆 鏂规硶涓€锛歋et鍘婚噸娉曪紙鐪熼璀﹀憡锛侊級
鈥?strong>鈥?杩欐柟娉曚篃澶姱瑙勪簡鍚э紵"鈥?/strong>鈥?鏂版墜鐪嬪埌Set鍘婚噸閮戒細杩欎箞鎯炽€?br/> 鐩存帴涓婁唬鐮佹劅鍙楁毚鍑伙細
javascript澶嶅埗const fruits = ["馃崕","馃崒","馃崕","馃崐","馃崒","馃崌","馃崒"] const uniqueFruits = [...new Set(fruits)] // ["馃崕","馃崒","馃崐","馃崌"]
鈥?strong>鈥嬪師鐞嗗叾瀹炲法绠€鍗曗€?/strong>鈥嬶細Set澶╃敓涓嶈兘瀛橀噸澶嶅€硷紝灏卞儚瓒呭競鍌ㄧ墿鏌滐紝涓€涓牸瀛愬彧鑳芥斁涓€浠跺寘瑁广€?/p>
鈿狅笍 鈥?strong>鈥嬩絾鏄紒鈥?/strong>鈥?閬囧埌瀵硅薄鏁扮粍灏辩炕杞︼細
javascript澶嶅埗const users = [{id:1}, {id:1}, {id:2}] [...new Set(users)] // 杩樻槸3涓厓绱狅紒
鈥?strong>鈥嬩綘鍝侊紝浣犵粏鍝佲€?/strong>鈥嬶細瀵硅薄鍐呭瓨鍦板潃涓嶅悓锛孲et璁や笉鍑烘潵鏄悓涓€涓笢瑗裤€傝繖鏃跺€欏氨瑕佹惉鏁戝叺浜?..
馃洜锔?鏂规硶浜岋細Map渚︽帰娉曪紙瀵硅薄鍏嬫槦锛?/h3>
鈥?strong>鈥?杩欑帺鎰忓効涓嶆槸瀛橀敭鍊煎鐨勫悧锛?鈥?/strong>鈥?寰堝灏忕櫧鍒濊Map鍘婚噸閮芥嚨鍦堛€?br/> 楠氭搷浣滄潵浜嗭細
javascript澶嶅埗const users = [{id:1}, {id:1}, {id:2}] const map = new Map() users.forEach(item => map.set(item.id, item)) const uniqueUsers = [...map.values()] // 鎴愬姛鍘婚噸锛佸彧鍓﹊d:1鍜宨d:2
鈥?strong>鈥嬪叧閿偣鈥?/strong>鈥嬶細鎶婂敮涓€鏍囪瘑锛堟瘮濡俰d锛夊綋閽ュ寵锛屽悗鍑虹幇鐨勪細瑕嗙洊鍓嶉潰鐨勶紝灏卞儚鍋滆溅鍦哄崰杞︿綅銆?/p>
馃挕 鈥?strong>鈥嬩釜浜鸿俯鍧戠粡楠屸€?/strong>鈥嬶細
鏈夋鎴戠敤JSON.stringify
澶勭悊瀵硅薄锛岀粨鏋滈亣鍒板瓧娈甸『搴忎笉鍚屽氨缈昏溅...鍚庢潵鍙戠幇鐢ㄥ敮涓€ID鏈€闈犺氨锛?/p>
鈿栵笍 鏂规硶涓夛細Reduce宸ュ尃娉曪紙鐏垫椿涔嬬帇锛?/h3>
鈥?strong>鈥?杩欎笉灏辨槸涓疮鍔犲櫒鍚楋紵"鈥?/strong>鈥?鍒氬紑濮嬫垜涔熻繖涔堟兂锛岀洿鍒扮湅鍒拌繖绉嶅啓娉曪細
javascript澶嶅埗const nums = [1,2,3,2,1,4,5] const uniqueNums = nums.reduce((acc, cur) => { return acc.includes(cur) ? acc : [...acc, cur] }, []) // [1,2,3,4,5]
鈥?strong>鈥嬮€傚悎鍦烘櫙鈥?/strong>鈥嬶細闇€瑕佽嚜瀹氫箟鍒ゆ柇鏉′欢鏃讹紝姣斿鏍规嵁鏃堕棿鎴宠繃婊ら噸澶嶆棩蹇椼€?/p>
馃敟 鈥?strong>鈥嬫€ц兘璀︽姤鈥?/strong>鈥嬶細
鏁扮粍瓒婂ぇ瓒婂崱锛佸洜涓烘瘡娆¢兘瑕侀亶鍘嗘柊鏁扮粍銆傝繖鏃跺€欏彲浠ユ崲鎴怱et杈呭姪锛?/p>
javascript澶嶅埗const uniqueNums = nums.reduce((acc, cur) => acc.has(cur) ? acc : acc.add(cur), new Set())
馃弳 涓夊ぇ闂ㄦ淳姣旀澶т細锛堣〃鏍煎姣旓級
鎸囨爣 | Set | Map | Reduce |
---|---|---|---|
鈥?strong>鈥嬩唬鐮侀噺鈥?/strong>鈥?/td> | 1琛屾悶瀹?鉁?/td> | 3-4琛?/td> | 3-4琛?/td> |
鈥?strong>鈥嬪璞″鐞嗏€?/strong>鈥?/td> | 鐩存帴鎵戣 鉂?/td> | 杞绘澗鎷挎崗 鉁?/td> | 闇€鑷畾涔夊垽鏂?/td> |
鈥?strong>鈥嬫€ц兘鈥?/strong>鈥?/td> | O(n) 馃殌 | O(n) 馃殌 | O(n虏) 馃悓 |
鈥?strong>鈥嬬伒娲绘€р€?/strong>鈥?/td> | 姝绘澘 | 涓瓑 | 澶╄姳鏉跨骇 鉁?/td> |
馃挕 鐙瑙佽В锛氶€夋柟娉曡鐪嬩笁澶ц绱?/h3>
- 鈥?strong>鈥嬫暟鎹噺绾р€?/strong>鈥?鈫?瓒呬竾鏉℃暟鎹椂锛屾閮戒笉鐢≧educe瑁稿鐗堬紒
- 鈥?strong>鈥嬫暟鎹被鍨嬧€?/strong>鈥?鈫?瀵硅薄鏁扮粍鐩存帴閿佹Map
- 鈥?strong>鈥嬫祻瑙堝櫒鍏煎鈥?/strong>鈥?鈫?闇€瑕佹敮鎸両E锛熻刀绱у噯澶嘊abel淇濆懡绗?/li>
锛堝伔鍋疯涓暟鎹細鍦ㄧ瑪鑰呯淮鎶ょ殑10涓」鐩腑锛屸€?strong>鈥?0%鐨勭畝鍗曞幓閲嶉兘鐢⊿et鈥?/strong>鈥嬶紝鍓╀笅20%閲孧ap鍗?5%锛孯educe鍙湁5%鍑哄満鏈轰細锛?/p>
馃 缁撳熬鐏甸瓊鎷烽棶
涓嬫鐪嬪埌閲嶅鏁版嵁锛屼綘鏄噯澶囩户缁瑿trl+C/V鎵嬪姩鍒狅紝杩樻槸鎺忓嚭杩欎笁鎶婄憺澹啗鍒€锛?br/> 鈥?strong>鈥嬭浣忓挴鈥?/strong>鈥嬶細宸ュ叿娌℃湁濂藉潖锛屽彧鏈夊悎涓嶅悎閫傘€傚氨鍍忎笉鑳界敤鑿滃垁鐮嶅ぇ鏍戯紝涔熷埆鎷跨數閿垏钁辫姳鍢涳紒
锛堢獊鐒舵兂鍒颁釜鍐风煡璇嗭細V8寮曟搸澶勭悊Set鐨勯€熷害姣旀暟缁勯亶鍘嗗揩300鍊?..鍡紝杩欐暟鎹浣犺X鐢ㄤ竴闃靛瓙浜嗭級
本文由嘻道妙招独家原创,未经允许,严禁转载