数组去重

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