使用字符串在连接数组中获取逗号

时间:2017-04-26 04:51:32

标签: javascript

当我使用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
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分: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 :(得分:1)

split上使用b时,b是一系列单个字符。记录b + a时,由于b是一个数组而a是一个字符串,+将充当字符串连接运算符。隐式使用btoString()转换为字符串。数组上的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

答案 2 :(得分: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);

答案 3 :(得分:0)

我添加

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

它正在运作。非常感谢你:D