2017-05-08 90 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

相关问题