每天一个小知识,快速回顾知识点,今天回顾-数组去重的方法
1.假设有一个数组,内部有许多重复的值(今天我们只考虑基本类型的值),需要将其重复的值去掉。
例如:
1 | let arr=[1,1,2,2,3,3,4,4,5,6,7, '9' ,9] |
方案一:利用Set数据结构
1 | let newArr=Array.from( new Set(arr)); //需要用Array.from将最后结果转化为数组,毕竟Set只是类数组<br>//console.log(newArr) [1, 2, 3, 4, 5, 6, 7, '9', 9] |
方案二:利用Array.prototype.indexOf()
说明:Array.prototype.indexOf()方法返回数组中第一次出现给定元素的下标,如果不存在则返回 -1。
1 | let newArr=arr.filter((item,index)=>arr.indexOf(item)===index) //我们利用filter这个方法对数组中每一项值进行筛选,那么怎么筛选呢,就是找到数组中第一次出现的元素下标与当前循环时的index与相等时就筛选出去,例如遍历第一个元素时arr.indexOf(1)返回的是0,此时遍历的下标index正好也是0,所以就将1筛选出去啦,遍历第二个元素时arr.indexOf(1)返回的还是0,但是此时遍历的index下标是1,所以就不会筛选出去。//console.log(newArr) [1, 2, 3, 4, 5, 6, 7, '9', 9] |
方案三:利用Array.prototype.reduce()
1 | let newArr=arr.reduce((pre,next)=>pre.includes(next)?pre:pre.concat(next),[]) //初始值为空数组,也是迭代完成后的返回值,判断遍历的下一项在不在数组内,不在就进行添加,如果在就不做处理<br>//console.log(newArr) [1, 2, 3, 4, 5, 6, 7, '9', 9] |
方案四:双重循环去重
1 2 3 4 5 6 7 8 9 10 11 12 | const deleteRepeatVal = (arr) => { for ( let i = 0, len = arr.length; i < len; i++) { for ( let j = i + 1; j < len; j++) { if (arr[i] === arr[j]) { arr.splice(j, 1); j--; len--; } } } return arr; }; |
方案五:利用es6扩展运算结合Set
1 | let newArr=[... new Set(arr)] //其实和方案一差不多,只是转化数组的方式不同罢了<br><br>//console.log(newArr) [1, 2, 3, 4, 5, 6, 7, '9', 9] |
方案六:遍历数组,将值作为对象的键进行判断
function deleteRepeatVal(arr) {
let obj = {};
for (let i = 0; i < arr.length; i++) {
if (obj[arr[i]]) { //如果对象的键有值,代表数组里的值重复了,需要将此项删除,并且将i进行--,因为数组长度减少了
arr.splice(i, 1);
i--;
continue;
}
obj[arr[i]] = arr[i];//将值作为obj的键
}
return arr;
}
好啦,今天就回顾这几个数组去重的方法啦,相信大家还有许多其他方法欢迎评论区进行讨论,最后留给大家思考题,今天我们只考虑了数值是基本类型的数组,如果有对象形式的数组又该怎么去重呢?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY