0

我已经进行了以下练习,但似乎无法使其正常工作。

//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 循环时它不起作用。

4

2 回答 2

0

首先,run 函数应该是返回removeDuplicates(params)的,对吧?

你在正确的路线上,但需要再次考虑这种情况:

else if(string.lastIndexOf(string[i]) == string.indexOf(string[i]))

i = 0and'tree traversal word'为例,lastIndexOf()将返回 5(第二个 't' 的索引),而 indexOf() 将返回 0。

显然这不是您想要的,因为尚未附加 't' word(但它是一个重复的字符,这是您的条件实际测试的内容)。

因为您正在逐渐建立word,所以考虑测试以查看字符是否已经string[i]存在于word您的 for 循环的每次迭代中。如果没有,请附加它。

(也许这会派上用场:http ://www.w3schools.com/jsref/jsref_search.asp )

祝你好运!

于 2013-08-08T19:10:21.737 回答
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>
于 2013-08-08T19:01:34.527 回答