
JS数组去重的方法
发布日期:2021-05-14 16:32:49
浏览次数:10
分类:精选文章
本文共 1952 字,大约阅读时间需要 6 分钟。
Below是优化后的内容:
利用 ES6 Set 去重
方法一:使用 Set 和 Array.from
같은值会被 Set自動去重,Array.from 可以将其轉換為陣列。
function unique(arr) { return Array.from(new Set(arr));}
注意事項:
- Set 只能 accept Objects,轉换為集合時, Pale 難的 key 必须是 primitives(字符串或數值)。
- 如果數值型的 key,Set 會自動進位。
方法二:遍历塔蝶-splice
先創建Pointer, 階驰遍歷,遇到重复值時刪除後面的元素。
function unique(arr) { for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { if (arr[i] === arr[j]) { arr.splice(j, 1); j--; } } } return arr;}
注意事項:
- splice 方法摘除元素,且 j 需要降低,否則索引會出錯。
利用 indexOf 去重
於 Penny ,建立新陣列,時間 complexity O(n²),但直觀易懂。
function unique(arr) { if (!Array.isArray(arr)) { console.log('輸入錯誤'); return []; } const result = []; for (let i = 0; i < arr.length; i++) { if (result.indexOf(arr[i]) === -1) { result.push(arr[i]); } } return result;}
利用 sort()
排序並移動重复元素。
function unique(arr) { if (!Array.isArray(arr)) { console.log('輸入錯誤'); return []; } const sorted = arr.slice().sort(); const result = [sorted[0]]; for (let i = 1; i < sorted.length; i++) { if (sorted[i] !== sorted[i - 1]) { result.push(sorted[i]); } } return result;}
使用 includes 方法
直接檢查是否存在陣列已有元素, dahaเข็ง kop。
function unique(arr) { if (!Array.isArray(arr)) { console.log('輸入錯誤'); return []; } const result = []; for (let item of arr) { if (!result.includes(item)) { result.push(item); } } return result;}
使用 Map 去重
使用 Map 儿童儲存$arrayElem, unmap():
function unique(arr) { const map = new Map(); const result = []; for (let item of arr) { if (!map.has(item)) { map.set(item, true); result.push(item); } } return result;}
使用 filter
直接 filter 排除重复元素。
function unique(arr) { return arr.filter((item, index, arr) => { return arr.indexOf(item) === index; });}
重點總結:
- Set 創建了新集合,杜撰重複值。
- splice 可能效率低,ray-hinge一些情況下基殆效果。
- indexOf 是手動 implemented, cubic timing.
- sort() 及 filter 都會 O(n log n) 时间 complexity。
- Map 提供了更直接的方式儲存VISITOR 已經查看的元素。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月05日 21时18分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C语言编译错误列表
2019-03-07
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07
张一鸣:创业7年,我经历的5件事
2019-03-07
git拉取远程指定分支代码
2019-03-07
《web安全入门》(四)前端开发基础Javascript
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07
python struct 官方文档
2019-03-07
Android DEX加固方案与原理
2019-03-07
Android Retrofit2.0 上传单张图片和多张图片
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Unable to execute dex: Multiple dex files
2019-03-07
Java多线程
2019-03-07
Unity监听日记
2019-03-07
AndroidStudio跳到错误位置
2019-03-07
木马开发的基本理论基础(五)
2019-03-07
openssl服务器证书操作
2019-03-07