需要使用JavaScript过滤掉字符串中重复的连续字符
这是Codewars中的一个挑战,我应该编写一个函数,它接受一个字符串并返回一个数组,在这个数组中我不能有两个连续的相同元素。此外,订单不应更改 例如,如果我传递一个字符串“hhhhheellloooohhheeyyy”,那么函数应该返回一个需要使用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
数组=[“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;ivar str=“hhhhheellloooohheeeyy”;
var strLen=str.length;
var newStr=“”;
对于(变量i=0;i
尝试仅使用一份数据副本。试图比较两个副本并保持其索引的准确性会使问题变得过于复杂。您只需跟踪当前值以及下一个或上一个值。如果当前值等于这两个值中的任何一个,则丢弃一个,因为它是重复的。或者,您可以研究正则表达式。他们可以在一行中完成这种类型的替换,如果你现在开始使用正则表达式,你将永远找到它们的用途。@LinuxHi,我想到了跟踪下一个或上一个值的想法,但我想不出一个代码。我会再试几次,如果我还是不明白,我会联系你。谢谢。请尝试仅使用一份数据副本。试图比较两个副本并保持其索引的准确性会使问题变得过于复杂。您只需跟踪当前值以及下一个或上一个值。如果当前值等于这两个值中的任何一个,则丢弃一个,因为它是重复的。或者,您可以研究正则表达式。他们可以在一行中完成这种类型的替换,如果你现在开始使用正则表达式,你将永远找到它们的用途。@Linuxhi,我想到了跟踪下一个或上一个值的想法,