大家好来聊聊”数组去重”这个小技巧怎么样?虽然有点陌生,但真的很实用尤其是在面试这种场合,用得上而且很难不让人留下深刻印象。今天我们就来一起研究下如何实现它!
别急,我告诉你,真实项目里处理去重这种事情都是后台的活儿,我们用户不用担心。面试时可要认真想想怎么处理这个问题。别怕,你跃跃欲试的那些解决方案都告诉我?面试官可能会对你钦佩得五体投地!
function unique (arr) { return Array.from(new Set(arr)) } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]
瞧这儿,学习一个ES6Set去重的小技能!超简单,马上就能学会。不用担心兼容性问题地表最强大荐for in for+splice。这招在ES5中也是常客,无论比武嘛啥的,重复的肯定得被刷掉。就这两招,轻松去掉数组里的不一样的东西。
function unique(arr){ for(var i=0; i<arr.length; i++){ for(var j=i+1; j<arr.length; j++){ if(arr[i]==arr[j]){ //第一个等同于第二个,splice方法删除第二个 arr.splice(j,1); j--; } } } return arr; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}] //NaN和{}没有去重,两个null直接消失了
咱接着聊谈谈怎么用indexOf给数组去重呗。首先,准备个新的空数组做容器。然后,依次检查老数组,和新数组比对,有的话就别管它了,没的话,就把它加进去。虽然有点麻烦,但实际操作还行,那你还知道别的法子吗?对比如利用对象属性,用sorted()排序,或者是用includes()看里面有没有,然后再用hasOwnProperty()自己查查,filter()也可以挑出特定元素,递归也是好使的,甚至还有Map这种强大神器,这些都既实用又高效!
你知道吗?要快速清除数组里的重复元素,其实还有点小麻烦!虽然有办法可以解决这个问题,但是想要高效处理的话还是有点困难的。我倒是建议你试试 includes 和 hasOwnProperty 这俩好用的函数,轻轻松松就能把数组洗得干干净净。另外,给你好好介绍下这个厉害的“过滤递归大招”,不管问题多大多难都能应对自如!
function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return } var array = []; for (var i = 0; i < arr.length; i++) { if (array .indexOf(arr[i]) === -1) { array .push(arr[i]) } } return array; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) // [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}] //NaN、{}没有去重
说说怎么用Map来去除数组里的重复项呗。其实挺容易的,首先我们得弄个新的Map出来,然后挨个检查那些要处理的数据,把每个元素当做key存进Map里面。别忘了,Map可不允许有重复的key,这样最后就能得到一串没有重复元素的数队了。还想学别的方法去重数组么?俺还有俩法宝,一个叫 ascend+includes ,另一个叫 […new Set(arr)] 。
function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return; } arr = arr.sort() var arrry= [arr[0]]; for (var i = 1; i < arr.length; i++) { if (arr[i] !== arr[i-1]) { arrry.push(arr[i]); } } return arrry; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) // [0, 1, 15, "NaN", NaN, NaN, {…}, {…}, "a", false, null, true, "true", undefined] //NaN、{}没有去重
这里有个好招,把Reduce和Includes混用,然后加个大括号里面的神奇符号:[…new Set(arr)],不仅简单,而且高效省事,代码写起来就像散步一样轻松!特别要提的是[…new Set(arr)],简直就是飞速运行,用起来跟喝水一样简单!这个方法可能不稀奇,但绝对能让你的code看起来干净利落,就像小学生写的文章一样。
function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return } var arrry= []; var obj = {}; for (var i = 0; i < arr.length; i++) { if (!obj[arr[i]]) { arrry.push(arr[i]) obj[arr[i]] = 1 } else { obj[arr[i]]++ } } return arrry; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", 15, false, undefined, null, NaN, 0, "a", {…}] //两个true直接去掉了,NaN和{}去重
小伙伴们,今儿咱们提前下线了希望看了这视频能让你更好地明白去重是怎么回事。咱平时可能用不着它,但面试可千万别闹笑话。有意思的话就鼓个掌分享给朋友!如果你有啥看法,欢迎在下方评论区留言和大家一块讨论!
function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return } var array =[]; for(var i = 0; i < arr.length; i++) { if( !array.includes( arr[i]) ) {//includes 检测数组是否有某个值 array.push(arr[i]); } } return array } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}] //{}没有去重
别犹豫了,学学如何排重就能让你在面试时大放异彩!而且这还能提高咱们的编程水平。有啥疑问或想法尽管提,评论区等你来聊!别忘了给个赞~分享出去,让更多人受益!谢谢大家给我鼓劲儿
function unique(arr) { var obj = {}; return arr.filter(function(item, index, arr){ return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true) }) } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}] //所有的都去重了
评论0