我正在学习 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 中的三个 1)。对正在发生的事情有什么想法吗?
谢谢!
答案 0 :(得分:1)
尽管此解决方案不是最有效的解决方案,但修复代码的最简单方法是
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) 对是相同的,但您的代码将它们视为不同。
答案 1 :(得分:0)
问题在于逻辑。您正在执行第一个循环 6 次,而第二个循环在前一个循环的每次迭代中执行 5 次。将会有多个周期进入 if 在多个机会中 尝试以下操作:
const removeDuplicateds = (arr=undefined)=>{
let result = arr.filter((item,index)=>{
return arr.indexOf(item) === index;
})
return result;
}
答案 2 :(得分:-1)
你也使用 set。
let arr = [1,2,3,4,1,1];
const removeDuplicated = (arr) => {
const set = new Set(arr)
return Array.from(set)
}