数组去重的方式有很多,我们可以使用 Set 去重、filter 过滤等,详见 携程&蘑菇街&bilibili:手写数组去重、扁平化函数 ,但三种解法(Set、filter、reducer)都产生了新数组:
MDN : filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
那么我们如何在不产生性数组的情况下删除数组中的重复元素喃?
方式一:排序去重
MDN:sort() 方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的
constremoveDuplicates=(nums)=>{// 原地排序nums.sort()// 去重letlen=1for(leti=1;i<nums.length;i++)if(nums[i]!=nums[i-1])nums[len++]=nums[i];// 删除重复项nums.splice(len)returnnums}// 测试removeDuplicates([1,2,3,1,3])// [1, 2, 3]方式二:优化
constremoveDuplicates=(nums)=>{letlen=nums.length-1for(leti=len;i>=0;i--){if(nums.indexOf(nums[i])!=i){nums[i]=nums[len--]}}// 删除重复项nums.splice(len+1)returnnums}// 测试removeDuplicates([1,2,3,1,3])// [1, 2, 3]
数组去重的方式有很多,我们可以使用 Set 去重、filter 过滤等,详见 携程&蘑菇街&bilibili:手写数组去重、扁平化函数 ,但三种解法(Set、filter、reducer)都产生了新数组:
那么我们如何在不产生性数组的情况下删除数组中的重复元素喃?
方式一:排序去重
方式二:优化