2017-04-26 54 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()採用一個參數即分隔符,默認值爲「,」。如果您想要在沒有任何分隔符的情況下加入,您需要指定空字符串。參考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

當您在b使用split將其轉換爲字符串,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

這是因爲當一個數組和一個字符串連接在一起時,數組被隱式轉換爲一個字符串。

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

相同:

array.toString() + ""; 

[4, 5].toString()"4,5"(添加,默認情況下)。

爲什麼?

因爲,在到達這條線時:

console.log(b + a); 

a將是一個字符串,因爲它是從字符串cc切割。而b是一個數組,因爲它是分割的結果,並且b.join不會將b更改爲字符串,它只是返回一個不使用的字符串,並且保留b完整(因此b仍然是數組)。

修復:

使用的b.join結果不b

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

或:

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

我添加

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

它的工作。非常感謝你:D

+0

請指出正確的答案,並感謝通過upvoting發佈它的人/或接受該答案,而不是發佈實際上是評論的答案。 – m69

+0

有關更多信息,請參見http://stackoverflow.com/help/someone-answers。 –