摘要:遍历无法判断循环去重效率较高遍历效率不如判断不出遍历遍历解决无法排除问题排除解决问题索引去重把直接全部去除掉了索引去重索引去重集合转换效率低能去掉重复集合转换挂载方法到上总结遍历无法判断需要手动判断效率最高索引去重直接把所有干掉了看
const arr = [1,2,"1",null,null,undefined,undefined,false,false,NaN,NaN];
1.0 遍历 无法判断NaN
//for循环去重,效率较高 const unique1 = (arr)=>{ const newArr = []; let item; for (let i = 0 , len = arr.length ; i < len; i++) { item = arr[i]; if(newArr.indexOf(item) === -1){ newArr.push(item); } } return newArr; } console.log("遍历:unique1",unique1(arr));//[1, 2, null, false, NaN, NaN] //forEach 效率不如for,判断不出NaN const unique2 = (arr)=>{ const newArr = []; arr.forEach(item=>{ if(newArr.indexOf(item) === -1){ newArr.push(item); } }) return newArr; } console.log("遍历:unique2",unique2(arr));//[1, 2, null, false, NaN, NaN] //reduce const unique3 = (arr)=>{ return arr.reduce((pre,next)=>{ if(pre.indexOf(next) === -1){ pre.push(next) }; return pre; },[]) } console.log("遍历:unique3",unique3(arr));// [1, 2, null, false, NaN, NaN] //解决NaN无法排除问题 const unique1_1 = (arr)=>{ const newArr = []; let item; let flag = true; for (let i = 0 , len = arr.length ; i < len; i++) { item = arr[i]; if(newArr.indexOf(item) === -1){ if(item != item){ //排除NaN if(flag){ newArr.push(item); flag = false; } }else { newArr.push(item); } } } return newArr; } console.log("解决NaN问题:unique1_1",unique1_1(arr));//[1, 2, null, false, NaN]
2.0 索引去重 把NaN直接全部去除掉了
//2.1for const unique4 = (arr)=>{ const newArr = []; let item; for (let i = 0 , len = arr.length; i < len; i++) { item = arr[i]; if(arr.indexOf(item) === i){ newArr.push(item); } } return newArr; } console.log("索引去重:unique4",unique4(arr));//[1, 2, null, false] //2.2filter const unique5 = (arr)=>{ return arr.filter((item,index,arr)=>arr.indexOf(item) === index) } console.log("索引去重:unique4",unique5(arr));//[1, 2, null, false]
3.0集合转换 效率低,能去掉重复NaN;
//Set const unique6 = (arr)=>{ return Array.from(new Set(arr)); } console.log("集合转换:unique6",unique6(arr));
挂载方法到Array上
const unique = function(){ return Array.from(new Set(this)); } Array.prototype.unique = unique; const uniqueArr = arr.unique();
总结: 遍历无法判断NaN需要手动判断,for效率最高;索引去重直接把所有NaN干掉了,看情况使用;Set去重简单、能去掉NaN,但是效率最低;
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/108499.html
摘要:数组去重是校招面试的必考知识点。以下就是笔者所实现的数组去重的几种简单的方式。结合实现这种方法的关键点就是判断是否相同的时候不要忽略对元素类型的判断。以上就是笔者所想到的几个数组去重的方式大家如果有更好的方法欢迎留言。 数组去重,是校招面试的必考知识点。简单的说,数组去重就是将一个数组中的相同的元素删除,只保留其中的一个。这里的相同其实是一个陷阱,有好多同学只认为值相等即为相同,而忽略...
摘要:前几天在做了一道题,这道题的核心问题是数组去重。现写一函数,返回一个新的升序的字符串,其值由中的值组成,要求包含最多字符且不能重复。代码中的和函数是中的数组方法。 前几天在codewars做了一道题,这道题的核心问题是数组去重。昨晚之后看到别人的solution,感觉自己的solution太low了。 题目 Take 2 strings s1 and s2 including only...
摘要:数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些你能答出其中的种,面试官很有可能对你刮目相看。数组去重的方法一利用去重中最常用不考虑兼容性,这种去重的方法代码最少。 数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些?你能答出其中的10种,面试官很有可能对你刮目相看...
阅读 3246·2021-09-22 15:58
阅读 1714·2019-08-30 14:17
阅读 1715·2019-08-28 18:05
阅读 1503·2019-08-26 13:33
阅读 682·2019-08-26 12:20
阅读 604·2019-08-26 12:18
阅读 3190·2019-08-26 11:59
阅读 1400·2019-08-26 10:36