javascript中数组去重的经常使用方法

方法一(使用es6新增的set构造函数)

function DeWeight(arr){
    return [...new Set(arr)]
}
console.log(DeWeight([1,2,"2",3,5,3,2]))
复制代码

方法二: (使用indexOf方法)

function DeWeight(arr){
  /**
   * 第一步:初始化一个新数组
   * 第二步:遍历传进来的数组,拿数组中的每个元素经过indexOf函数里面查找,
   *        若是没查出来,就把当前元素丢到新数组中,不然已经有了,管它弄啥
  */
  let newArr = []
  for(let i=0;i<arr.length;i++){
    if(newArr.indexOf(arr[i]) == -1){
      newArr.push(arr[i])
    }
  }
  return newArr
}
console.log(DeWeight([1,2,"2",3,5,3,2]))
复制代码

方法三:(双循环)

function DeWeight(arr){
  /**
   * 第一步: 初始化一个数组
   * 第二步:使用双层循环,拿外层循环中的一个元素跟后面的全部元素进行比较,
   *        若是都不相等,就把它push到新数组中,不然外层下表+1,继续比较
   * 
   * 注:实现原理是每一个元素都跟后面的元素比较,取相同元素的最后一个元素
   */
  let newArr = []
  for(let i=0;i<arr.length;i++){
    for(let j=i+1;j<arr.length;j++){
      if(arr[i] === arr[j]){
        i++
      }
    }
    newArr.push(arr[i])
  }
  return newArr

}
console.log(DeWeight([1,2,"2",2,3,5,3]))
复制代码

方法四:(es6数组中的filter方法)

function DeWeight(arr){
  /**
   * 第一步:初始化一个map对象
   * 第二步:经过数组的filter方法过滤全部元素,利用map的has方法判断传进来的每个元素,
   *        若是此元素没有在map里面,就+到map里面去返回true,不然false
   * 
   * 注:数组的filter() map的has() set()
   */
    var map=new Map();
    let newArr = arr.filter(function(item){
      if(!map.has(item)){
        map.set(item)
        return true
      }else{
        return false
      }
    })
    return newArr
}
console.log(DeWeight([1,2,"2",2,3,5,3]))
复制代码

方法五:(es6数组中的includes方法)

function DeWeight(arr){
   /**
   * 第一步:初始化一个新数组
   * 第二步:遍历传进来的数组,经过使用数组的includes方法判断每个元素是否在新数组中,
   *        若是没有,就把此元素丢到新数组中,不然下一个
   */
  let newArr = []
  for(let i=0;i<arr.length;i++){
    if(!newArr.includes(arr[i])){
      newArr.push(arr[i])
    }
  }
  return newArr
}
console.log(DeWeight([1,2,"2",3,5,3,2]))
复制代码
相关文章
相关标签/搜索