编程技术文章分享与教程

网站首页 > 技术文章 正文

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

hmc789 2024-11-10 10:37:45 技术文章 2 ℃

数组去重的方式有很多,我们可以使用 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([
1, 2, 3, 1, 3])
// [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([
1, 2, 3, 1, 3])
// [1, 2, 3]




Tags:

标签列表
最新留言