2017-05-08 1 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

마스크 문자열의 동일한 위치에서 값 문자열을 분리하고 문자와 다른 문자를 필터링 할 수 있습니다.

그런 다음 배열에 새 문자열을 결합하십시오. mask의 해당 값이 -

없는 경우

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

그냥 값을 반복하고 확인 당신이 반복 경우

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

관련 문제