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

Need to filter out repeating consecutive characters in a string using JavaScript

本文关键字:字符 连续 字符串 JavaScript 过滤      更新时间:2023-09-26

这是Codewars中的挑战之一,我应该编写一个函数,它将接受一个字符串并返回一个数组,其中我不能有两个连续的相同元素。同时,顺序不能改变。

例如,如果我传递一个字符串"hhhhheeeelllloooooohhheeeyyy",那么函数应该返回一个array = ["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;
 }

所以,如果我传递一个字符串,比如"hhhhheeeeeellllloooo",它不会像我想的那样工作,因为j的值不断增加,因此我不能过滤掉所有相同的元素。

我试着调整逻辑,这样每当unique[j] === unique[k]的值j将变成零,如果不是这种情况,那么事情将继续他们应该做的。

这给了我一个无限循环。

我需要你的帮助

第二个for loop失败,因为unique.length在运行期间不是恒定的。我认为你的问题可以这样解决:

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];
   }
} 

希望有帮助!

您只需要将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
}

我想这会对你有帮助:

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))

for循环不会失败,因为唯一。长度是动态的,即会随着新元素的加入而改变。

也在Internet Explorer中测试过。这里是jsfiddle的链接:https://jsfiddle.net/kannanore/z5gbee55/

var str = "hhhhheeeelllloooooohhheeeyyy";
var strLen = str.length;
var newStr = "";
for(var i=0; i < strLen; i++ ){
    var chr$ = str.charAt(i);  
    //if(i==0) {newStr = chr$ };
    if(chr$ == str.charAt(i+1)){
        strLen = str.length;`enter code here`
    }else{
        newStr = newStr + chr$ ;
    }
}
//document.write(newStr);
console.log(newStr);
//Answer: helohey