美文网首页
前端面试必问之数组去重

前端面试必问之数组去重

作者: 明明你也一样 | 来源:发表于2019-12-02 10:34 被阅读0次

基于数组API实现去重

  • 创建一个空数组空间来比较
    循环数组中的每一项添加到空数组中,每次添加的时候验证一下,新数组中是否包含这一项,有则不添加
let arr = [1,3,2,2,3,1,1,1,2]
let newArr = []
for(let i = 0; i< arr.length; i++){
    let item = arr[i]
    // 验证数组项是否存在,也可以用indexOf、lastIndexOf方法
    if(newArr.includes(item)){
        continue
    }
    newArr.push(item)
}

还可以将代码简化成下面这样

let arr = [1,3,2,2,3,1,1,1,2]
let newArr = []
arr.forEach(item => {
    if(newArr.includes(item)) return
    newArr.push(item)
})
  • 创建一个对象空间来进行比较

循环数组中的每一项,将索引和值当作对象的属性和值存储起来,每次存储之前检查对象属性是否存在,若存在则删除这一项

let arr = [1,3,2,2,3,1,1,1,2]
let obj = {}
for(let i = 0; i< arr.length; i++){
    let item = arr[i]
    // 验证对象属性是否存在
    if(obj[item])){
        arr.splice(i,1)
        i--  // 解决数组塌陷问题
    }else{
        obj[item] = arr[i]
    }
}

但是从中间删除数组的一项是非常耗费性能的一件事,优化方法是将要删除的项与最后一项替换,删除最后一项来达成之前的效果。

for(let i = 0; i< arr.length; i++){
    let item = arr[i]
    if(obj[item])){
        // 将当前项与最后一项替换
        arr[i] = arr[arr.length - 1]
        arr.pop(length-1)
        i--  // 解决数组塌陷问题
    }else{
        obj[item] = arr[i]
    }
}

双重循环去重

循环数组,将这一项与数组之后的每一项进行比较,若相同则删除

function removeDuplicates(arr) {
    for (let i = 0; i < arr.length; i++) {
        const item = arr[i]
        for (let j = i + 1; j < arr.length; j++) {
            if (item === arr[j]) {
                arr.splice(j, 1)
                j--
            }
        }
    }
    return arr
}

基于ES6的Set实现去重

Set与解构赋值去重

ES6中新增了数据类型set,set的一个最大的特点就是数据不重复。Set函数可以接受一个数组(或类数组对象)作为参数来初始化

arr = [...new Set(arr)]

Set与Array.from去重

Array.from方法可以将Set结构转换为数组结果

arr = Array.from(new Set(arr))

相关文章

  • 2020-01-19做些js的数组练习吧

    1.前端面试必问之数组去重 前端面试必问之数组去重 2.前端面试必问之深拷贝浅拷贝 3.

  • 前端面试必问之数组去重

    基于数组API实现去重 创建一个空数组空间来比较循环数组中的每一项添加到空数组中,每次添加的时候验证一下,新数组中...

  • 数组去重

    数组去重 数组去重是前端笔试或面试中经常出现的一道题,伴随着 ECMAScript(后文缩写为 ES) 的发展,它...

  • 前端面试题之数组去重

    // 可以在函数刚开始时,添加个鉴别参数是否为数组 1、Es6 Set 代码最少,但缺点是无法去掉{}空对象。 2...

  • 【JavaScript】数组去重

    话说面试常会碰到面试官会问JavaScript实现数组去重的问题,最近刚好在学习有关于JavaScript数组相关...

  • js数组去重

    面试常问数组去重方法有那些: 1.用Es6的Set方法 2.使用双重for循环,再利用数组的splice方法去重(...

  • 前端数组去重

  • JS数组去重你会几种呀?

    前言 数组去重是一个老生常谈的话题,也是前端童鞋在面试时的一道高频题。本文将深入的探索数组去重的原理及实现,为各位...

  • 面试官在“逗”你系列:数组去重你会几种呀?

    前言 数组去重是一个老生常谈的话题,也是前端童鞋在面试时的一道高频题。本文将深入的探索数组去重的原理及实现,为各位...

  • 面试必备!数组去重的 6 种方法

    在前端的面试或笔试中,经常会碰到让你写一段数组去重的代码,今天就带大家一起来学习数组去重的 6 个方法,所谓人无我...

网友评论

      本文标题:前端面试必问之数组去重

      本文链接:https://www.haomeiwen.com/subject/evfhictx.html