javascript - 尝试使用.splice 删除 JavaScript 中的重复项
问题描述
我正在尝试创建一个函数,从数组中删除重复的数组元素并返回没有重复的相同数组。我认为这会起作用:
var removeDuplicates = function(nums) {
nums.sort(function(a,b){ return a-b;});
let len = nums.length;
for (let i = 0; i < nums.length; i++){
if (nums[i] === nums[i+1]){
nums.splice(i,1);
}
}
return nums;
};
console.log(removeDuplicates([0,0,1,1,1,2,2,3,3,4]));
但是,底部的控制台日志将 nums 返回为 [0,1,1,2,3,4] 而不是我期望的 [0,1,2,3,4]。有什么方法可以修改 for 循环或以不同的方式使用 splice(或者可能是其他不返回新数组的数组方法)来删除最后 1 个重复项?
解决方案
您需要减少索引,因为它上面的元素将被移动到当前索引中。
var removeDuplicates = function(nums) {
nums.sort(function(a,b){ return a-b;});
let len = nums.length;
for (let i = 0; i < nums.length; i++){
if (nums[i] === nums[i+1]){
nums.splice(i,1);
--i;
}
}
return nums;
};
console.log(removeDuplicates([0,0,1,1,1,2,2,3,3,4]));
或者,向后循环完全避免了这个问题。
var removeDuplicates = function(nums) {
nums.sort(function(a,b){ return a-b;});
let len = nums.length;
for (let i = nums.length - 1; i >= 0; i--){
if (nums[i] === nums[i+1]){
nums.splice(i,1);
}
}
return nums;
};
console.log(removeDuplicates([0,0,1,1,1,2,2,3,3,4]));
更简单的方法是使用Set
.
var removeDuplicates = function(nums) {
return [...new Set(nums.sort((a,b)=>a-b))];
};
console.log(removeDuplicates([0,0,1,1,1,2,2,3,3,4]));
推荐阅读
- python - 使用 DataFrame.plot 绘制列的函数
- reactjs - 如何使用 Material-UI 按钮在 Typescript 函数上实现道具类型?
- java - 用于 springBatch 项目的 azure 中的 webjobs
- flutter - 如何意识到这一点?
- c# - 一些计算器错误
- python - 移动应用程序如何与 python 脚本交互?
- apache - Bitrix24 On-Premise 站点无法加载带有错误消息的页面。无法访问此站点。拒绝连接
- windows - windows10如何访问容器的挂载目录?
- html - 我的 HTML 签名在 Outlook 中存在间距问题
- c# - 创建不冲突的数字以存储在数据库中?