我接受了以下练习,但似乎无法使其正常运作。
//Remove duplicate characters in a
// given string keeping only the first occurrences.
// For example, if the input is ‘tree traversal’
// the output will be "tre avsl".
// ---------------------
var params = 'tree traversal word';
var removeDuplicates = function (string) {
return string;
};
// This function runs the application
// ---------------------
var run = function() {
// We execute the function returned here,
// passing params as arguments
return removeDuplicates;
};
我做了什么 -
var removeDuplicates = function (string) {
var word ='';
for(var i=0; i < string.length; i++){
if(string[i] == " "){
word += string[i] + " ";
}
else if(string.lastIndexOf(string[i]) == string.indexOf(string[i]))
{
word += string[i];
}
}
return word;
};
我不允许使用replaceAll,当我创建一个内部for循环时,它不起作用。
答案 0 :(得分:0)
<script>
function removeDuplicates(string)
{
var result = [];
var i = null;
var length = string.length;
for (i = 0; i < length; i += 1)
{
var current = string.charAt(i);
if (result.indexOf(current) === -1)
{
result.push(current);
}
}
return result.join("");
}
function removeDuplicatesRegex(string)
{
return string.replace(/(.)(?=\1)/g, "");
}
var str = "tree traversal";
alert(removeDuplicates(str));
</script>
答案 1 :(得分:0)
首先,run函数应该返回removeDuplicates(params)
,对吗?
你说的是正确的,但需要再次考虑这个问题:
else if(string.lastIndexOf(string[i]) == string.indexOf(string[i]))
以i = 0
为例,以'tree traversal word'
为例,lastIndexOf()
将返回5(第二个't'的索引),而indexOf()将返回0 。
显然这不是你想要的,因为't'还没有附加到word
(但它是一个重复的字符,这是你的条件确实测试的)。
由于您正在逐步构建word
,请考虑测试以查看for循环的每次迭代中string[i]
中是否存在字符word
。如果没有,请追加它。