2017-12-30 20 views
1

두 번째 문자열은 배열에서 변환되어 NaN 개의 객체가 들어있는 두 번째 문자열입니다. 각 NaNreplace() 메서드를 사용하여 첫 번째 문자열의 문자로 바꿉니다. 문자열을 반복하는 것은 분리 된 함수에서 잘 수행되지만, replace() 메서드의 두 번째 인수로 삽입하면 첫 번째 문자열의 첫 번째 문자 만 제공됩니다. 무엇을 바꾸어야합니까?JavaScript에서 replace() 메소드 내부에 문자열을 반복합니다.

let ReverseMe = function (parameter) { 
    let extractedString = parameter.replace(/[^a-z]/gi, ""); 
    let extractedStringArray = extractedString.split(""); 
    extractedStringArray.reverse(); 
    let joinedExtracted= extractedStringArray.join(); 

    let newArray = parameter.split(""); 
    let mixedArray = newArray.map(Number); 
    let joinedMixed = mixedArray.join(); 

    let result = joinedMixed.replace(/NaN/g, 
    joinedExtracted.charAt(function (str) { 
     var newStr =''; 
     for (i = 0; i < str.length; i++) { 
     newStr += str[i]; 
     } 
    })); 
    console.info(result); 
} 

ReverseMe('ab2c'); 

// Output: c,c,2,c 
// Expected: cb2a 
: I가 replace() 방법에 삽입 할 때, I는 (가변 result 저장) 잘못된 결과 를 얻을

function proceed(str){ 
    var newStr =''; 
    for (i = 0; i < str.length; i++) { 
    console.log(newStr += str[i]); 
    } 
    return newStr; 
} 
proceed('ab2c'); 

/* Output: */ 
// a 
// ab 
// ab2 
// ab2c 

을 그러나 : 여기

작동 별도의 함수이며
+0

'ab2c'에서'cb2a'를 얻기위한 논리는 무엇입니까? – Mamun

+0

이것은 단지 reverse() 메서드입니다. 추출 된 문자 배열 (extractedStringArray)에 적용한 다음 join() 메서드를 적용한 문자열로 다시 변환되었습니다. 결과는 새로운 역전 된 문자열 joinedExtracted에 저장됩니다.이 문자열은 루프에 들어갈 때 'cba'입니다. – user2751869

답변

0

UPDATE : 요 인해

ur comment, 언급 한 기준에 맞는 대답을 업데이트했습니다.

function reverseMe(string) { 
 
    var chars = string.split(''); 
 
    var array = chars.map(Number); 
 
    chars = chars.filter(char => isNaN(Number(char))); 
 
    
 
    return array.map(item => isNaN(item) ? chars.pop() : item).join(''); 
 
} 
 

 
var theString = reverseMe("ab2c"); 
 

 
console.log(theString); 
 
// → cb2a 
 

 
console.log(reverseMe("1abc2zyx3w")); 
 
// → 1wxy2zcb3a 
 

 
console.log(reverseMe("a1b2c")); 
 
// → c1b2a

올드 대답 : 당신의 긴장은 지금까지 문자열을 반대 만하는 경우

, 당신과 같이 매우 간단하게 수행 할 수 있습니다

function reverseMe(string) { 
    var newString = ''; 
    for (var i = string.length - 1; i >= 0 ; i--) { 
    console.log(newString += string[i]); 
    } 
    return newString; 
} 

var theString = reverseMe("ab2c"); 
// → c 
// → c2 
// → c2b 
// → c2ba 

console.log(theString); 
// → c2ba 

그러나 코드에서 문제는 joinedExtracted.charAt(function(str)...이 param으로 숫자를 얻지 못한다는 것입니다. eter, 매개 변수로 전달 된 함수가 function(str) {...} 인 경우 정의되지 않은 값은을 반환합니다.

따라서 charAt()은 암시 적으로 매개 변수를 0으로 간주하여 "c" 인 첫 번째 문자를 반환하여 "cc2c"를 제공합니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 목표는 문자열의 간단한 반대가 아니며 입력 문자열에 나타나는 숫자는 출력 문자열의 동일한 위치에 나타나야합니다. 이전 버전의 코드는 "a1b2c"와 같이 문자와 숫자의 선형 교대로 이루어진 입력에서 잘 작동합니다. (var i = 0; i user2751869

+0

@ user2751869 내 답변에서 업데이트를 살펴보십시오. – theAlexandrian

+0

매우 우아한 해상도. 브라보! – user2751869

관련 문제