2017-12-30 77 views
1

2つの文字列、つまり2番目の文字列が、NaNオブジェクトを含む配列から変換されています。私はreplace()メソッドを使用して、各NaNを最初の文字列の文字に置き換えようとします。文字列をループするのは分離された関数でうまくいくが、replace()メソッドの2番目の引数として挿入すると、最初の文字列の最初の文字のみが返される。私は何を変えるべきですか?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 
:私は replace()メソッドにそれを挿入したときに、私は(変数 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:ヨーヨーのために

あなたが言及した基準に合うように答えを更新しました。

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)...は何も数値として取得されないということですパラメータに渡された関数がfunction(str) {...}のため、定義されていないのでを返します。

のでcharAt()は、暗黙的にパラメータが0であると考えるので、あなたに「cc2c」を与え、「C」ある最初の文字を返します。

+0

返信いただきありがとうございます。しかし、目標は単純な文字列の逆ではなく、入力文字列に現れる数字は出力文字列内の同じ位置に現れるはずです。以前のバージョンのコードでは、文字と数字の線形代入で構成された入力(たとえば "a1b2c")でうまくいきます:for(var i = 0; i user2751869

+0

@ user2751869私の答えで更新を見てください。 – theAlexandrian

+0

非常に優雅な解像度。ブラボー! – user2751869

関連する問題