2014-06-26 529 views
0

下面的代碼循環遍歷字符串,並刪除字符串中的字符與removeDuplicates()中傳遞的字符之間的所有重複項。所以數組將等於完美工作的「iel」。但是,如果我通過一個雙字母的單詞,比如「grass」,數組將等於ra,因爲s的兩個實例都將被刪除。我只需要刪除字母s的一個實例,而不是兩個?搜索並替換爲字符串

var currentWord = "field"; 
removeDuplicates(f,d); 

removeDuplicates:function(i, j){ 
     var arr = [] 
     var w = ""; 
     for(k=0;k<currentWord.length;k++){ 
      l = currentWord[k]; 
      arr.push(l); 
      if(i === l){   
       arr.splice(i,1); 
       index = arr.indexOf(i); 
       arr.splice(index, 1); 

      }; 

      if(j === l){ 
       index = arr.indexOf(j); 
       arr.splice(index, 1); 
       break; 
      }; 
     } 

     for(l=0;l<arr.length;l++){ 
      w += arr[l] 
     } 

     return w; 
    }, 
+0

什麼是「f」,「d」,「i」,「j」等?請在您的代碼中清楚。 –

+0

如果你這樣做:'indexOf'獲得第一次出現,你可以在那個indext + length字符處做一個替換開始,並用空字符串替換 – Fallenreaper

+0

@Jack我認爲那些是假設爲字符串? – Fallenreaper

回答

3

我想你試圖找到並替換(刪除)字符串中的匹配字符。

你可以做這樣的事情:

演示:http://jsfiddle.net/gkzHX/

function findAndReplace(a, b) { 
    b.forEach(function(s) { 
     a = a.replace(s, ''); 
    }); 
    return a; 
} 

console.log(findAndReplace("field", ['f', 'd'])); // returns iel 
console.log(findAndReplace("grass", ['g', 's'])); // returns ras 

replace替換目標字符串的字符的第一次出現。


此外,作爲在評論中所指出@ thg435,你可以通過這組作爲字符串,而不是一個數組,然後將其轉換爲陣列的功能裏面,然後用reduce替換荷蘭國際集團它。通過@ thg435

console.log(findAndReplace("field", 'fd')); 
console.log(findAndReplace("grass", 'gs')); 

小提琴:http://jsfiddle.net/gkzHX/1/

+0

不錯,雖然使用'reduce'會更自然:http://jsfiddle.net/gkzHX/1/ – georg

+0

太棒了!這正是我正在尋找的。 –

+0

@non_tech_guy:[接受它](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – georg

0

您可以只使用.replace()方法:

function findAndReplace(a, b) { 
    return b.split("").reduce(function(a, s) { 
     return a.replace(s, ''); 
    }, a); 
} 

現在,您可以通過搜索字符的字符串

removeDuplicates: function() { 
    var s = currentWord; 

    for (var i = 0; i < arguments.length; ++i) { 
     s = s.replace(arguments[i], ''); 
    } 

    return s; 
} 

removeDuplicates('f', 'd'); // iel 
removeDuplicates('g', 's'); // ras