从数组中删除重复项会在最终结果中留下重复值

Posted

技术标签:

【中文标题】从数组中删除重复项会在最终结果中留下重复值【英文标题】:Removing duplicates from an array leaves duplicate values in the end result 【发布时间】:2022-01-20 06:53:13 【问题描述】:

我正在尝试从数组中删除重复项,但我得到了两个额外的数字“2”。当我用 0 替换元素时它工作正常。只有当我 pop() 元素时它才会出错。

对于这个输入 [0,0,1,1,1,2,2,3,3,4],我希望是 [0,1,2,3,4]。为什么使用pop()时多了两个2?

function removeDuplicate(arr) 
  var i = 0;
  var j = 1;
  while (j < arr.length) 
    if (arr[i] === arr[j]) 
      j++;
     else 
      arr[++i] = arr[j];
      j++;
    
  
  for (i = i + 1; i < arr.length; i++) 
    // arr[i] = 0;
    arr.pop();
  

  return arr;


const ans = removeDuplicate([0, 0, 1, 1, 1, 2, 2, 3, 3, 4])
console.log(ans);

【问题讨论】:

你的问题是你的代码有什么问题,对吧?没有其他方法可以解决问题?如果是这样,我会在标题和文本中更清楚地说明这一点。目前,这是至少十几个其他有答案的问题的重复。 如果您正在寻找代码审查,您应该将您的问题移至codereview.stackexchange.com,他们会指出所有错误,以及您的代码中可以改进的地方。如果您只是在寻找如何删除重复项,那么 SO 上已经有很多答案了 这对您有帮助吗? javascripttutorial.net/array/… 不,我在问为什么我在 pop() 上得到错误的答案。请只说。面试时被问到这个问题,被拒了。 【参考方案1】:

For循环应该是这样才能得到正确的输出:

for(let k = arr.length; k > i+1; k--)
        arr.pop()
    

【讨论】:

您在问题中的 for 循环也可以。您所要做的只是将arr.length 存储在一个变量中,而不是直接在 for 循环的条件中使用 :) 你也可以这样做while (arr.length &gt; i+1) arr.pop(); 【参考方案2】:

解决方案:

function removeDuplicate(arr) 
    var i = 0;
    var j = 1;
    while (j < arr.length) 
      if (arr[i] === arr[j]) 
        j++;
       else 
        arr[++i] = arr[j];
        j++;
      
    
    for(let k = arr.length; k > i+1; k--)
        arr.pop()
    
  
    return arr;
  
  
  const ans = removeDuplicate([0, 0, 1, 1, 1, 2, 2, 3, 3, 4])
  console.log(ans);

【讨论】:

以上是关于从数组中删除重复项会在最终结果中留下重复值的主要内容,如果未能解决你的问题,请参考以下文章

使用新 Set 删除数组中的重复项会出错

按内容从bash数组中删除元素(存储在变量中)而不留下空白槽[重复]

从数组中删除重复元素[重复]

怎么用JS把特定字符串重复的字符删除留下一个

从 JS 数组中删除重复值 [重复]

#yyds干货盘点# LeetCode面试题:删除有序数组中的重复项