2017-04-26 56 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。 –