【发布时间】:2016-10-07 03:47:43
【问题描述】:
这是 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] 的值为零时,如果不是这种情况,那么事情将继续按预期进行。
这让我陷入了无限循环。
我需要你的帮助。
【问题讨论】:
-
尝试只使用一份数据副本。试图比较两个副本并保持它们的索引是直的,这会使问题变得过于复杂。您需要跟踪的只是当前值以及下一个或上一个值。如果当前值等于其中任何一个,则丢弃一个,因为它是重复的。作为替代方案,您可以查看正则表达式。它们可以在一行中完成这种类型的替换,如果您现在开始使用正则表达式,您将永远找到它们的用途。
-
@LinuxDisciple 嗨,我想到了跟踪下一个或上一个值的想法,但我无法为此提供代码。我会再试几次,如果还是不明白,我会联系你。谢谢。
标签: javascript arrays string function