[JS算法题]数组去重和字符串去重
数组去重
法一 利用ES6 Set去重
function unique (arr) { if (!Array.isArray(arr)) { console.log('type error!') } return [...new Set(arr)] }
function unique (arr) { if (!Array.isArray(arr)) { console.log('type error!') } return Array.from(new Set(arr)) }
法二 ES5 filter+indexOf
function unique(array) { var res = array.filter(function(item, index, array){ return array.indexOf(item) === index; }) return res; }
法三 兼容性好的双重for循环
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]){ arr.splice(j,1); j--; } } } return arr; }
字符串去除相邻重复项
输入: 'aabbbccdeeaa'
输出: 'abcdea'
法一 数组
function unique(str){ let arr = str.split(''); let newArr = [arr[0]]; for(let i=0; i<arr.length; i++){ let cur = arr[i]; if(cur !== newArr[newArr.length-1]){ newArr.push(cur); } } return newArr.join(''); }
法二 正则表达式
function unique(str){ return str.replace(/(.)(?=\1)/g, ''); }
(?=)预搜索,指明某个字符的右侧是什么,但不包含这部分,只匹配这个‘某个字符’
a(?=b) affgfgabd 匹配加粗的a
(.)加上()就是将匹配的该字符存储起来供以后引用,\1就是取存储的第一个