我正在学习javascript并尝试解决一些练习。我所使用的方法是让我从数组中删除所有重复项。到目前为止,这是我的代码:
const removeDuplicateds = (arr=undefined)=>{
let count=0;
for (let i=0; i <arr.length ; i++){
for (let j=1; j<arr.length; j++){
if (arr[i]=== arr[j]){
count= count +1;
}
}
}
return console.log(count);removeDuplicateds([1,2,3,4,1,1]);
所以我想通过使用计数器来验证这个结构(实际的做法是使用arr.splice(j,1)而不是count=count+1)。所以它返回12次,这意味着它在if条件下输入了12次,这是不可能的,因为应该只有3次(arr中的3个1)。知道发生了什么事吗?谢谢!
发布于 2021-07-27 18:20:30
尽管此解决方案不是最有效的解决方案,但修复代码的最简单方法是
let count = 0;
for (let i = 0; i < arr.length - 1; i++){
for (let j = i + 1; j < arr.length; j++){
if (arr[i] === arr[j]){
count++;
}
}
}您的原始代码发现了太多的重复项,因为尽管(1,3)和(3,1)对是相同的,但您的代码将它们视为不同。
发布于 2021-07-28 02:43:39
问题出在逻辑上。您正在执行第一个循环6次,而第二个循环在前一个循环的每次迭代中执行5次。如果有多个机会,则会有周期进入,请尝试以下操作:
const removeDuplicateds = (arr=undefined)=>{
let result = arr.filter((item,index)=>{
return arr.indexOf(item) === index;
})
return result;
}发布于 2021-07-28 02:26:03
您还可以使用set。
let arr = [1,2,3,4,1,1];
const removeDuplicated = (arr) => {
const set = new Set(arr)
return Array.from(set)
}https://stackoverflow.com/questions/68549952
复制相似问题