【问题标题】: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() 上得到错误的答案。请只说。面试时被问到这个问题,被拒了。

标签: javascript arrays function


【解决方案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);

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 2011-06-29
    • 2017-06-18
    • 1970-01-01
    • 2011-12-02
    • 2015-03-19
    • 1970-01-01
    • 2013-08-03
    相关资源
    最近更新 更多