如何从另一个字符串中"减去"一个字符串?

Sна*_*ƒаӽ 3 javascript language-agnostic

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

var value = "1-000-111";
var mask = " -   -";
Run Code Online (Sandbox Code Playgroud)

我想减去maskvalue.换句话说,我想要这样的东西:

var output = subtract(value, mask);
// output should be 1000111
Run Code Online (Sandbox Code Playgroud)

实施的最佳方式是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;
}
Run Code Online (Sandbox Code Playgroud)

JavaScript是否有内置功能来完成此任务?注意,掩蔽字符不限于-(破折号),也可以是其他字符,例如+.但是在给定的情况下,掩蔽字符只能是-或者+,因此可以被发送到subtract()函数,这使得处理不同的掩蔽字符变得微不足道.此外,屏蔽字符将处于任意位置.

任何与语言无关的答案也是受欢迎的.

Nin*_*olz 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 -   -"));
Run Code Online (Sandbox Code Playgroud)