【拿下JS算法】:数组去重

本篇将介绍常见的三种数组去重方法(小技能三种以上)。
欢迎大家在评论区提供更优方法,不足之处望海涵!

一、数组遍历,借助临时数组存储

  • 技能点
    • includes方法判断数组是否包含某一指定的值,包含返回true,否则返回false。
  • demo
function unique(arr) {
    const newArr = []
    for (let i = 0, len = arr.length; i < len; i++) {
        // 这个地方可以使用indexOf()替代,远离是一样的
        if (!newArr.includes(arr[i])) {
            console.log(arr[i])
            newArr.push(arr[i])
        }
    }
    return newArr
}

const arr = [1, 2, 3, 2, 5, 6, 5]
const newArr = unique(arr)
console.log(newArr) // [1, 2, 3, 5, 6]

二、ES6 Set

  • 技能点
    • Set为ES6新增对象,它是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。
    • Array.from方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。
  • demo
function unique(arr) {
    // 这个地方也可以使用ES6 扩展语法进行返回
    // return [...new Set(arr)]
    return Array.from(new Set(arr))
}

const arr = [1, 2, 3, 2, 5, 6, 5]
const newArr = unique(arr)
console.log(newArr) // [1, 2, 3, 5, 6]

三、splice删除

  • 技能点
    splice方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。关于数组方法学习,也可以移步到Javascript对象之【Array】进行交流学习。
  • demo
function unique(arr) {
    for (let i = 1; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j ++ ) {
            if (arr[i] == arr[j]) {
                arr.splice(j, 1)
            }
        }
    }
    return arr
}

const arr = [1, 2, 3, 2, 5, 6, 5]
const newArr = unique(arr)
console.log(newArr) // [1, 2, 3, 5, 6]
posted @ 2020-08-31 15:39  程会玩  阅读(131)  评论(0编辑  收藏  举报