[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就是取存储的第一个