如何 'subtract' 一个字符串从另一个?

How to 'subtract' one string from another?

假设我有以下两个字符串:

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 有内置的东西来完成这个吗?请注意,屏蔽字符不限于 -(破折号),还可以是其他字符,如 +。但在给定的情况下,掩码字符只能是 -+,因此可以将其发送到 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);

如果您遍历值的每个字符并与掩码中的相同位置进行比较,则掩码可以是任何字符:

在 split() 值上使用 Array#reduce() 的示例

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

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

console.log(unmasked )