Javascript 从输入中删除所有相邻的重复字符

Javascript 从输入中删除所有相邻的重复字符,javascript,arrays,unique,Javascript,Arrays,Unique,函数unique_in_order,它以一个序列作为参数,返回一个项目列表,其中没有任何元素彼此相邻且具有相同值,并保留元素的原始顺序 例如: uniqueInOrder('AAAABBBCCDAABBB') == ['A', 'B', 'C', 'D', 'A', 'B'] uniqueInOrder('ABBCcAD') == ['A', 'B', 'C', 'c', 'A', 'D'] uniqueInOrder([1,2,2,3,3]) == [1,2,3] 根据您的需求,提供了两

函数unique_in_order,它以一个序列作为参数,返回一个项目列表,其中没有任何元素彼此相邻且具有相同值,并保留元素的原始顺序

例如:

uniqueInOrder('AAAABBBCCDAABBB') == ['A', 'B', 'C', 'D', 'A', 'B'] 
uniqueInOrder('ABBCcAD') == ['A', 'B', 'C', 'c', 'A', 'D'] 
uniqueInOrder([1,2,2,3,3]) == [1,2,3]

根据您的需求,提供了两种不同的解决方案:

  • 您可以对唯一集使用
    Set()
    。只需将值添加到集合中,即可保留顺序并防止添加唯一值

  • 对于连续唯一的集合,您可以使用
    filter
    对数组进行迭代

    • 如果参数是字符串,则通过在空白字符串上拆分(
      .split(“”)
      )来创建此数组
    • 迭代输入值数组时,可以将当前值与前一个值进行比较;如果它们不同,则返回
      true
    • true
      响应将包括作为筛选结果创建的数组中的值(该数组保存您的唯一值)
  • uniqueInOrder('AAAABBBCCDAABBB')==['A','B','C','D','A','B']
    唯一顺序('ABBCcAD')=['A','B','C','C','A','D']
    唯一顺序([1,2,2,3,3])==[1,2,3]
    功能唯一(输入){
    变量集=新集(),
    arr=输入;
    如果(输入类型=='string')
    arr=arr.split(“”);
    arr.forEach(val=>{
    set.add(val)
    });
    console.log('input:',input);
    log('unique:',[…set]);
    返回[…设置];
    }
    函数唯一顺序(输入){
    var-arr=输入;
    如果(输入类型=='string')
    arr=arr.split(“”);
    var unique=arr.filter((val,i,arr)=>{
    返回值!==arr[i-1];
    });
    log('input:',JSON.stringify(input));
    log('uniqueInOrder:',JSON.stringify(unique));
    返回唯一值;
    
    }
    首先要做的是规范化输入,这样无论是字符串还是数组都无关紧要

    const input = Array.isArray(x) ? x : x.split('');
    
    在上述操作之后,输入将始终是一个数组。现在跳过的逻辑是重复的,这非常简单

    for (let i = 0; i < input.length; ++i) {
      if (input[i] == input[i + 1]) continue
      result.push(input[i])
    }
    

    请分享您的代码。可能是@Kinduser的重复现在我有@Kinduser“方式不同”?他在问如何从数组中删除重复项。只是因为它是一根线吗?因为有很多重复的地方,或者你没有解释你的代码是如何工作的。。。我相信我在你的回答中不止一个提到过…@Kinduser我认为你的用户名不太准确。此外,如果你想谈论过度复杂,你在任何地方使用
    […str]
    都是一样糟糕的,如果不是更糟的话,考虑到它会把你的算法变成
    O(n^2)
    一个。@Kinduser,因为仅仅发布工作代码并不意味着你正确回答了一个问题。如果您想要一个合理的批评,那么您的代码最初的运行时非常糟糕,您现在已经修复了这个问题,并且您仍然没有真正解释它。而且,你的评论也不是很愉快。也许试着从这个问题上休息一下?你看起来很沮丧。