Javascript 我试着把数字放入数组中,而不放重复的数字

Javascript 我试着把数字放入数组中,而不放重复的数字,javascript,arrays,Javascript,Arrays,我的代码返回长度为0。从数组中排除重复项后,它应该返回5。我想我在代码中遗漏了一些我没有想到的东西。有人能快速回顾一下并告诉我遗漏了什么吗?我更希望在解决方案中使用我的代码,而不是全新的代码。多谢各位 问题: 给定已排序的数组nums,删除重复项 使每个元素只出现一次并返回新长度 不要为另一个数组分配额外空间,必须这样做 通过使用O(1)个额外内存就地修改输入阵列 const number=[0,0,1,1,1,2,2,3,3,4] const removeDuplicates=(nums)=>

我的代码返回长度为0。从数组中排除重复项后,它应该返回5。我想我在代码中遗漏了一些我没有想到的东西。有人能快速回顾一下并告诉我遗漏了什么吗?我更希望在解决方案中使用我的代码,而不是全新的代码。多谢各位

问题: 给定已排序的数组nums,删除重复项 使每个元素只出现一次并返回新长度

不要为另一个数组分配额外空间,必须这样做 通过使用O(1)个额外内存就地修改输入阵列

const number=[0,0,1,1,1,2,2,3,3,4]
const removeDuplicates=(nums)=>{
nums.sort()
const newArr=[]
//或者只是数一数有多少个数字,不包括重复的数字
for(设i=0;i
要就地执行,必须使用array.splice()。大概是这样的:

let i = numbers.length - 1
do {
  let x = numbers.indexOf(numbers[i])
  if ( x !== i ) {
    numbers.splice(x,1)
  }
  i -= 1
} while ( i > 0 )

代码中的问题是这一行:

            if(!nums[i] === nums[j]){
您可能打算:

            if(nums[i] !== nums[j]){
也就是说,嵌套for循环的逻辑有问题。这可能是您的意图:

const number=[0,0,1,1,1,2,2,3,3,4]
const removeDuplicates=(nums)=>{
nums.sort((a,b)=>a-b);
常数newArr=[];
设prev=-无穷大;
对于(设i=0;i,您可以使用来实现这一点

    const numbers = [0,0,1,1,1,2,2,3,3,4]
    const reducer = (accumulator, currentValue) => {
      if(accumulator.indexOf(currentValue) === -1){
        return [...accumulator, currentValue]
      }
      return accumulator
    }
    
    const removeDuplicates = arr => arr.reduce(reducer, []);
    
    removeDuplicates(numbers) // -> output [0, 1, 2, 3, 4 ]

您不应该创建新数组:
在适当的位置删除重复项
您已经获得一个排序数组,调用
.sort()
它不仅会导致不必要的计算复杂度增加,而且也不会正确排序。问题陈述还明确指出不要创建新数组,但这就是您正在做的。我进行了排序,以防传入函数的数组不是sortedHi Rahul,感谢您的更正。您能解释一下-Infinit吗y&continue part?
prev=-Infinity;
仅将变量初始化为您的输入数组不包含的值。如果当前数字与上一个数字不同,我们将继续下一个值。否则,我们将其添加到
newArr
中。是的,它可以工作!谢谢!您能否发送一个链接,进一步解释-Infinity是什么呃?