JS数组去重常用的方法

93 阅读1分钟
//* Set去重  ES6function unique(arr) {
​
 return Array.from(new Set(arr))
}
console.log(unique(arr))
​
​
​
//* splice去重
function unique1(arr) {
  for (let i = 0; i < arr1.length; i++) {
    for (let j = i + 1; j < arr1.length; j++) {
      //判断前后两位数是否相同
      if (arr1[i] == arr1[j]) {
        arr1.splice(j, 1)
        // splice会更改数组长度,需要减1
        j--
      }
    }
  }
  return arr
}
console.log(unique1(arr))
​
​
//* indexOf去重
//判断数组是否存在这个数,存在返回0,如果不存在返回-1,将数值添加到新建数组
function unique2(arr) {
  if (!Array.isArray(arr)) {
    console.log('type error')
    return
  }
  let array = []
  for (let i = 0; i < arr.length; i++) {
    if (array.indexOf(arr[i] === -1)) {
      array.push(arr[i])
    }
  }
  return array
}
​
//* 利用include去重
function unique3(arr) {
  if (!Array.isArray(arr)) {
    console.log('type error')
  }
  const array = []
  for (let i = 0; i < arr.length; i++) {
    //includes检测数组是否有某个值
    if (!array.includes(arr[i])) {
      array.push(arr[i])
    }
  }
  return array
}
​
// 利用hasOwnProperty
function unique(arr) {
  let obj = {}
  return arr.filter(item => {
    // typeof item + item可以输出"item数据类型 + item值"的字符串结果
    // hasOwnPrototype()来判断obj内是否有这个数据类型的数据,如果有返回false,没有的话返回true,filter会将其保留
    return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
  })
}

数组去重的方法还有

  1. 利用sort
  2. 利用对象属性不能相同的特点进行去重(不建议用)
  3. 利用filter
  4. 使用递归
  5. map去重