2017-05-08 19 views
2

は、私は、次の二つの文字列があるとします。ある文字列を他の文字列から '引き算'する方法はありますか?

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には、これを実現するための何かが組み込まれていますか?マスク文字は-(ダッシュ)に限定されず、+のように他の文字であってもよいことに留意されたい。また、マスキング文字は任意の位置にあります。

また、言語に依存しない回答もあります。

+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

免責事項:私は* "unmasking" *が現在非常に熱い政治トピックである米国政府と提携していません – charlietfl

関連する問題