2017-04-26 1 views
0

joinメソッドを使用すると、なぜコンマがあるのか​​わかりません。誰でも説明できますか?結合された配列のコンマを文字列で取得する

function maskify(cc) { 
 
    var a = cc.slice(cc.length - 4, cc.length); 
 
    var b = cc.slice(0, cc.length - 4); 
 
    b = b.split(""); 
 
    for (var i = 0; i < b.length; i++) { 
 
    b[i] = "#"; 
 

 
    } 
 
    b.join("#"); 
 
    console.log(b + a); 
 
} 
 

 
maskify("sadasdasdasdasdasd"); 
 
// result : #,#,#,#,#,dasd

+0

はい私はカンマを意味します –

+1

あなたは 'b.join(" "#"); 'を実行していますが、それを保存していません –

答えて

2

Join()ストリング戻るようにその要素を結合することを可能にする配列する方法です。 Join()はセパレータである1つの引数をとります。デフォルト値は "、"です。セパレータなしで結合する場合は、空文字列を指定する必要があります。参照のためにMDNを参照してください。あなたのコードの場合

は、あなたが参加するが、格納していない、と再び変数a

function maskify(cc) { 
 
     var a = cc.slice(cc.length - 4, cc.length); 
 
     var b = cc.slice(0, cc.length - 4); 
 
     b = b.split(""); 
 
     for (var i = 0; i < b.length; i++) { 
 
     b[i] = "#"; 
 
    
 
     } 
 
     var output=b.join("#"); 
 
     console.log(output + a); 
 
    } 
 
    
 
    maskify("sadasdasdasdasdasd"); 
 
    // result : #,#,#,#,#,dasd

1

あなたはbsplitを使用して+演算子を使用して文字列に変換し、bされています個々の文字の配列b + aを記録する場合、bは配列で、aの文字列であるため、+は文字列連結演算子として機能します。 bは暗黙的にtoString()を使用して文字列に変換されます。配列のtoStringは、配列要素の文字列を,で結合したものを返します。ですから、あなたはコンマを最終出力に入れています。

この問題を解決する簡単な解決策は、連結する前に配列要素を明示的にjoinすることです。

function maskify(cc) { 
 
    var a = cc.slice(cc.length - 4, cc.length); 
 
    var b = cc.slice(0, cc.length - 4); 
 
    b = b.split(""); 
 
    for (var i = 0; i < b.length; i++) { 
 
    b[i] = "#"; 
 

 
    } 
 
    b.join("#"); 
 
    console.log(b.join('') + a); 
 
} 
 

 
maskify("sadasdasdasdasdasd");

同じ結果を達成するための別の方法は、これが唯一の最新のブラウザ/環境でサポートされていることをrepeat

var str = 'sadasdasdasdasdasd'; 
 

 
var maskedStr = '#'.repeat(str.length -4) + str.slice(-4); 
 
console.log(maskedStr);

注意を使用しています。 browser compatibility(サポートされていない場合)をご確認ください。polyfill

1

配列と文字列を連結すると、配列は暗黙的に文字列に変換されるからです。

array.toString() + ""; 

[4, 5].toString()は(デフォルトで,を追加)"4,5"です:

var array = [...]; 
array + ""; 

は同じです。

なぜ?

は、この行に達したときに、ので:それは文字列ccからカットされたため

console.log(b + a); 

aは文字列になります。bは配列の結果であり、b.joinbを文字列に変更せず、使用しない文字列を返します。bは元のままです(したがって、bは配列のままです)。

修正:

console.log(b.join("#") + a); 

か::

b.joinないbの結果使用し

b = b.join("#"); 
console.log(b + a); 
0

を私は

var c = b.concat(a); 
c.join(""); 
を追加

これは機能しています。ありがとうございます:

+0

正しい答えを示し、upvotingと/または実際にコメントである回答を投稿するのではなく、その答えを受け入れること。 – m69

+0

詳細については、http://stackoverflow.com/help/someone-answersを参照してください。 –

関連する問題