2017-05-08 89 views
2

假設我有以下兩個字符串:如何從另一個字符串中「減去」一個字符串?

var value = "1-000-111"; 
var mask = " - -"; 

我想maskvalue。換句話說,我想是這樣的:

var output = subtract(value, mask); 
// output should be 1000111 

什麼是實現subtract()的最佳方式?我寫過這些,但對我來說這似乎並不優雅。

function subtract(value, mask) { 
    while (mask.indexOf('-') >= 0) { 
     var idx = mask.indexOf('-'); 
     value = value.substr(0, idx) + value.substr(idx + 1); 
     mask = mask.substr(0, idx) + mask.substr(idx + 1); 
    } 
    return value; 
} 

JavaScript是否有內置的東西來實現這一點?請注意,掩碼字符不限於-(短劃線),但也可以是其他字符,如+。此外,掩碼字符將處於任意位置。

任何語言不可知的答案也歡迎。

+0

可以在掩模有其他字符連字符消除? –

+0

你的解決方案假定所有的面具都會使用'-'就是這樣嗎? – epascarello

+1

不,掩碼也可以包含其他字符。而且,掩碼字符可以位於任意位置。 –

回答

5

您可以拆分值字符串並過濾與掩碼字符串相同位置的字符不相同的字符。

然後加入一個新字符串的數組。

function subtract(value, mask) { 
 
    return value.split('').filter(function (a, i) { 
 
     return a !== mask[i]; 
 
    }).join(''); 
 
} 
 

 
console.log(subtract("1-000-111", " - -")); 
 
console.log(subtract("foo1-000-111", "foo - -"));

3

通過價值就迭代,並檢查是否在mask相應的值不是-

var value = '1-000-111'; 
 
    var mask = ' - -'; 
 
    
 
    var result = ''; 
 
    for (var i = 0; i < value.length; i += 1) { 
 
     if (mask[i] !== '-') { 
 
      result += value[i]; 
 
     } 
 
    } 
 
    
 
    console.log(result);

1

面膜可以是任何字符,如果您通過迭代每個有價值的角色並比較同一位置在掩模:

實施例使用陣列#減少()上分割()值

var value = "1-000-111"; 
 
var mask = " - -"; 
 

 
var unmasked = value.split('').reduce((a,c,i) => (mask[i] === c) ? a : a+c); 
 

 
console.log(unmasked)

+0

免責聲明:我不隸屬於美國政府*,「揭露」*目前是一個非常熱門的政治話題 – charlietfl

相關問題