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

全部评论

相关推荐

MGlory:我当初有一个老师告诉我简历要写的简单,最好只一面,项目可以写核心的,进面了自然会问你的
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务