除了第一次出现之外,如何从字符串中删除重复项

时间:2013-08-08 18:31:50

标签: string

我接受了以下练习,但似乎无法使其正常运作。

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

2 个答案:

答案 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。如果没有,请追加它。

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

祝你好运!