假设我有以下两个字符串:
var value = "1-000-111";
var mask = " - -";
我想从value
减去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是否有内置的东西可以实现这一目标?请注意,掩盖字符不仅限于-
(dash(,但也可以是其他字符,例如+
。但是在给定的情况下,掩蔽字符只能是-
或+
,因此可以将其发送到subtract()
函数,这使得处理不同的掩蔽字符琐碎。另外,掩盖字符将处于任意位置。
也欢迎任何语言反应的答案。
您可以将值分开并过滤与蒙版字符串相同位置的字符相等的字符。
然后加入新字符串的数组。
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 - -"));
仅通过价值迭代并检查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);
掩码可以是任何字符,如果您遍历每个值的每个字符,并将其比较到蒙版中的同一位置:
使用Array#yred((on split((value
上的示例
var value = "1-000-111";
var mask = " - -";
var unmasked = value.split('').reduce((a,c,i) => (mask[i] === c) ? a : a+c);
console.log(unmasked )