Javascript 如何';减去';从一根线到另一根线?
假设我有以下两个字符串:Javascript 如何';减去';从一根线到另一根线?,javascript,language-agnostic,Javascript,Language Agnostic,假设我有以下两个字符串: var value = "1-000-111"; var mask = " - -"; 我想从值中减去掩码。换句话说,我想要这样的东西: var output = subtract(value, mask); // output should be 1000111 实现subtract()的最佳方法是什么?我写过这篇文章,但在我看来并不优雅 function subtract(value, mask) { while (mask.indexOf('-')
var value = "1-000-111";
var mask = " - -";
我想从值
中减去掩码
。换句话说,我想要这样的东西:
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是否有内置的功能来实现这一点?注意,屏蔽字符不限于-
(破折号),还可以是其他字符,如+
。但是在给定的情况下,屏蔽字符只能是-
或+
,因此可以发送到subtract()
函数,这使得处理不同的屏蔽字符变得很简单。此外,屏蔽字符将位于任意位置
也欢迎任何与语言无关的答案。您可以拆分值字符串并过滤与掩码字符串相同位置的字符不相等的字符 然后加入数组以获得新字符串
函数减法(值,掩码){
返回值.split(“”).filter(函数(a,i){
返回一个!==掩码[i];
}).加入(“”);
}
控制台日志(减去(“1-000-111”和“-”);
日志(减去“foo1-000-111”,“foo-”)代码>只需遍历值并检查掩码中的对应值是否不是-
var值='1-000-111';
变量掩码='-';
var结果=“”;
对于(变量i=0;i 控制台日志(结果)代码>如果您遍历值的每个字符并与掩码中的相同位置进行比较,则掩码可以是任何字符:
在split()值上使用数组#reduce()的示例
var value=“1-000-111”;
var mask=“-”;
var unmasked=value.split(“”).reduce((a,c,i)=>(mask[i]==c)?a:a+c);
console.log(无掩码)
掩码是否可以使用其他字符作为连字符来消除?您的解决方案假定所有掩码都将使用-
是这样吗?否,掩码也可以包含其他字符。此外,屏蔽字符可能位于任意位置。要删除的字符的位置是否重要?要删除的字符数是否不同?我假设value.replace(/-/g')代码>不符合您的要求?