不产生新数组,删除数组里的重复元素

高级前端进阶

共 894字,需浏览 2分钟

 · 2021-01-30

关注 三分钟学前端,回复“交流

加入我们一起学习,天天进步

数组去重的方式有很多,我们可以使用 Set 去重、filter 过滤等,详见 携程&蘑菇街&bilibili:手写数组去重、扁平化函数 ,但三种解法(Set、filter、reducer)都产生了新数组:

MDN : filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。

那么我们如何在不产生性数组的情况下删除数组中的重复元素喃?

方式一:排序去重

MDN:sort() 方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的

const removeDuplicates = (nums) => {
    // 原地排序
    nums.sort()
    // 去重
    let len = 1
    for (let i = 1; i < nums.length; i++)
        if (nums[i] != nums[i-1]) nums[len++] = nums[i];
    // 删除重复项
    nums.splice(len)
    return nums
}

// 测试
removeDuplicates([12313])
// [1, 2, 3]

方式二:优化

const removeDuplicates = (nums) => {
    let len = nums.length - 1
    for(let i = len; i>=0; i--) {
        if(nums.indexOf(nums[i]) != i) {
            nums[i] = nums[len --]
        }
    }
    // 删除重复项
    nums.splice(len+1)
    return nums
}
// 测试
removeDuplicates([12313])
// [1, 2, 3]


最后

欢迎关注「三分钟学前端」,回复「交流」自动加入前端三分钟进阶群,每日一道编程算法面试题(含解答),助力你成为更优秀的前端开发!
另外,每周还有手写源码题,瓶子君也会解答哟!

》》面试官也在看的前端面试资料《《
“在看和转发”就是最大的支持
浏览 33
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报