需要使用JavaScript过滤掉字符串中重复的连续字符

需要使用JavaScript过滤掉字符串中重复的连续字符,javascript,arrays,string,function,Javascript,Arrays,String,Function,这是Codewars中的一个挑战,我应该编写一个函数,它接受一个字符串并返回一个数组,在这个数组中我不能有两个连续的相同元素。此外,订单不应更改 例如,如果我传递一个字符串“hhhhheellloooohhheeyyy”,那么函数应该返回一个数组=[“h”、“e”、“l”、“o”、“h”、“e”、“y”] 这是我的密码 var uniqueInOrder=function(iterable){ //your code here - remember iterable can be a

这是Codewars中的一个挑战,我应该编写一个函数,它接受一个字符串并返回一个数组,在这个数组中我不能有两个连续的相同元素。此外,订单不应更改

例如,如果我传递一个字符串“hhhhheellloooohhheeyyy”,那么函数应该返回一个
数组=[“h”、“e”、“l”、“o”、“h”、“e”、“y”]

这是我的密码

    var uniqueInOrder=function(iterable){
  //your code here - remember iterable can be a string or an array
     var unique = [];
   for( var i = 0; i < iterable.length; i++) {
      unique.push(iterable[i]);
   } 

   for( var j = 0, k = 1; j < unique.length; j++, k = j + 1 ){
      if(unique[j] === unique[k]){
         unique.splice(k,1);
     }
    }
   return unique;
 }
var uniqueInOrder=函数(iterable){
//您的代码在这里-记住iterable可以是字符串或数组
var-unique=[];
for(var i=0;i
因此,如果我传递一个字符串,比如
“hhhhheeeeee lll ooo”
,它就不会像我所希望的那样工作,因为
j
的值不断递增,因此我无法过滤掉所有相同的元素

我试着调整逻辑,这样每当
unique[j]===unique[k]
时,j的值都会变为零,如果不是这样,那么事情就会像他们应该做的那样继续下去

这给了我一个无限循环


我需要您的帮助。

您只需将iterable的当前索引与unique中的最后一个字符进行比较:

function(iterable){
  var unique = []

  for(var i=0; i< iterable.length; i++){
    if(unique.length < 1){
      unique.push(iterable[i])
    } else if(iterable[i] !== unique[unique.length - 1]) {
      unique.push(iterable[i])
    }
  }

  return unique
}
函数(iterable){
var unique=[]
for(var i=0;i
您只需将iterable的当前索引与unique中的最后一个字符进行比较:

function(iterable){
  var unique = []

  for(var i=0; i< iterable.length; i++){
    if(unique.length < 1){
      unique.push(iterable[i])
    } else if(iterable[i] !== unique[unique.length - 1]) {
      unique.push(iterable[i])
    }
  }

  return unique
}
函数(iterable){
var unique=[]
for(var i=0;i
循环的第二个
失败,因为
唯一。在运行过程中,长度不恒定。
我认为你的问题可以这样解决:

var temp = iterable[0];
unique.push(iterable[0]);
for( var i = 1; i < iterable.length; i++) {
   if(iterable[i] != temp) {
       unique.push(iterable[i]);
       temp = iterable[i];
   }
} 
var-temp=iterable[0];
唯一的.push(iterable[0]);
for(var i=1;i

希望有帮助

循环
的第二个
失败,因为
是唯一的。在运行期间长度
不是恒定的。 我认为你的问题可以这样解决:

var temp = iterable[0];
unique.push(iterable[0]);
for( var i = 1; i < iterable.length; i++) {
   if(iterable[i] != temp) {
       unique.push(iterable[i]);
       temp = iterable[i];
   }
} 
var-temp=iterable[0];
唯一的.push(iterable[0]);
for(var i=1;i

希望有帮助

我认为这将有助于您:

var word="hhhhheeeelllloooooohhheeeyyy"
function doit(iterable){
  var unique = []
  unique[0]=iterable[0]
  for(var i=1; i< iterable.length; i++){
     if(iterable[i] !== unique[unique.length - 1]) {
      unique.push(iterable[i])
    }
  }
  return unique
}
alert(doit(word))
var word=“hhhhheelllooooheeeyyy”
函数doit(iterable){
var unique=[]
唯一的[0]=iterable[0]
for(var i=1;i

for循环不会失败,因为unique.length是动态的,即将随着向数组中添加新元素而改变

在Internet Explorer中也进行了测试。
这是指向JSFIDLE的链接:

我认为这将帮助您:

var word="hhhhheeeelllloooooohhheeeyyy"
function doit(iterable){
  var unique = []
  unique[0]=iterable[0]
  for(var i=1; i< iterable.length; i++){
     if(iterable[i] !== unique[unique.length - 1]) {
      unique.push(iterable[i])
    }
  }
  return unique
}
alert(doit(word))
var word=“hhhhheelllooooheeeyyy”
函数doit(iterable){
var unique=[]
唯一的[0]=iterable[0]
for(var i=1;i

for循环不会失败,因为unique.length是动态的,即将随着向数组中添加新元素而改变

在Internet Explorer中也进行了测试。 这里是到JSFIDLE的链接:

var str=“hhhhh eeeelllooooheeeyyy”;
var strLen=str.length;
var newStr=“”;
对于(变量i=0;i
var str=“hhhhheellloooohheeeyy”;
var strLen=str.length;
var newStr=“”;
对于(变量i=0;i
尝试仅使用一份数据副本。试图比较两个副本并保持其索引的准确性会使问题变得过于复杂。您只需跟踪当前值以及下一个或上一个值。如果当前值等于这两个值中的任何一个,则丢弃一个,因为它是重复的。或者,您可以研究正则表达式。他们可以在一行中完成这种类型的替换,如果你现在开始使用正则表达式,你将永远找到它们的用途。@LinuxHi,我想到了跟踪下一个或上一个值的想法,但我想不出一个代码。我会再试几次,如果我还是不明白,我会联系你。谢谢。请尝试仅使用一份数据副本。试图比较两个副本并保持其索引的准确性会使问题变得过于复杂。您只需跟踪当前值以及下一个或上一个值。如果当前值等于这两个值中的任何一个,则丢弃一个,因为它是重复的。或者,您可以研究正则表达式。他们可以在一行中完成这种类型的替换,如果你现在开始使用正则表达式,你将永远找到它们的用途。@Linuxhi,我想到了跟踪下一个或上一个值的想法,