【问题标题】:How can i get the number without repetition?我怎样才能得到不重复的号码?
【发布时间】:2020-11-30 14:30:18
【问题描述】:

我想只用一次重复得到号码:

let results = [2, 2, 1, 2, 3, 3, 1]
let pivot = 1
let cont = 0
let unitaries = []
for (var i = 0; i < results.length; i++) {
  if (pivot !== results[i + 1]) {
    pivot = results[i]
    if (cont === 0) {
      unitaries.push(results[i])
      results.splice(i, 1);
    }
    cont++
  }
}
console.log(unitaries)

我想得到[1,2,1],但现在我只得到[2]

【问题讨论】:

  • 不要从您正在迭代的数组中删除。
  • 请详细说明您要做什么。
  • 这能回答你的问题吗? Javascript array sort and unique 只需删除排序
  • @filimonic 它不应该删除所有重复项。只是连续重复。请注意,所需的结果有两次 1

标签: javascript algorithm


【解决方案1】:

只需使用 Array.prototype.filter 覆盖您的原始数组:

let results = [2, 2, 1, 2, 3, 3, 1];

results = results.filter(
    (n, i, array) => n !== array[i - 1] && n !== array[i + 1]
);

console.log(results); // [1, 2, 1]

【讨论】:

  • 但我需要从原始结果数组中删除该元素
  • 我更新的答案有帮助吗?我只是把前面的filter()倒过来了。
  • @RoboRobok 我认为他的意思是他需要修改原始数组。
  • @Barmar 在大多数情况下应该没有任何区别。
  • @jdode 如果要修改原始数组,为什么要打印unitaries 数组?
【解决方案2】:

这里是修改原始数组。

const results = [2, 2, 1, 2, 3, 3, 1]
for (let i = 0; i < results.length;) 
{
  let j = i;
  while (j < results.length)
  {
    if (results[j] === results[i]) j++;
    else break; 
  }
  if ((j - 1) > i) results.splice(i, j - i);
  else i++;
}
console.log(results);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2017-07-22
    • 2023-01-30
    相关资源
    最近更新 更多