数组的几种去重方法

1.双循环+splice

  let arr = [1, 2, 4, 2, 4, 2, 4, 55, 52, 1]
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] == arr[j]) {
        arr.splice(j, 1)
        j--
      }
    }
  }

2.单循环+indeOf

  let arr = [1, 2, 4, 2, 4, 2, 4, 55, 52, 1]
  let arrs = [arr[0]]
  for (let i = 0; i < arr.length; i++) {
    if (arrs.indexOf(arr[i]) == -1) {
      arrs.push(arr[i])
    }
  }
//或者用forEach代理for循环
  arr.forEach((item, index) => {
    if (arrs.indexOf(arr[index]) == -1) {
      arrs.push(arr[index])
    }
  })

3.filterr+indeOf

  let arr = [1, 2, 4, 2, 4, 2, 4, 55, 52, 1]
  let arrs = arr.filter((item, index) => {
    return arr.indexOf(item) == index
  })

4.Set

ES6中新增了数据类型Set,Set的一个最大的特点就是数据不重复。Set函数可以接受一个数组(或类数组对象)作为参数来初始化,利用该特性也能做到给数组去重。new Set方法,返回是一个类数组,需要配合[...]扩展运算符来转换为数组

  let arr = [1, 2, 4, 2, 4, 2, 4, 55, 52, 1]
  function deweighting(arr) {
    return [...new Set(arr)]
  }

  console.log(deweighting(arr));

5.includes+reduce

includes 可以判断一个数组中是否包含某一个元素,并返回true 或false

  let arr = [1, 2, 4, 2, 4, 2, 4, 55, 52, 1]
  let newArr = []
  arr.reduce((prev, curr) => {
    newArr.includes(curr) ? newArr : newArr.push(curr);

  }, 0)
  console.log(newArr);

 

你可能感兴趣的:(排序算法,javascript)