【问题标题】:javascript array join() methodjavascript数组join()方法
【发布时间】:2017-03-14 19:14:14
【问题描述】:

有人可以帮助我理解这个脚本:

String.prototype.padLeft = function(width, char) {

    var result = this;
    char = char || " ";

    if (this.length < width)  {
        result = new Array(width - this.length + 1).join(char) + this;
    }
    return result;
};
console.log("abc".padLeft(10,"-"));

所以.. 我用一种新方法扩展对象字符串。 char 参数是可选的(如果省略,函数将使用空格) 这部分我不清楚:

result = new Array(width - this.length + 1).join(char) + this;

我是否创建了一个包含 8 个未定义元素的新数组,然后用分隔符将它们分开?这是正确的吗?为什么数组定义中有“+1”?提前谢谢你

【问题讨论】:

  • 数组主要用于连接函数。它立即连接起来。
  • 感兴趣的代码,在字符串开头生成一个字符
  • +1 是必需的,因为加入长度为 n 的数组会产生 n-1 个分隔符。例如:['a','b','c'].join('-') 结果为“a-b-c”。但是这个算法需要 n 个分隔符,所以 +1.

标签: javascript arrays


【解决方案1】:

new Array(width - this.length + 1).join(char)

这个^实际上是在说“用n的槽数创建一个空数组,然后使用char将空槽连接在一起以分隔每个空槽。所以,如果char = "0"n = 3,我们得到000

width - this.length + 1 用于确定需要添加到字符串开头的字符数。

然后我们将它添加到原始字符串的开头:this

+1

由于 join 的工作方式,您需要 + 1。

new Array(1).join('0') = ""      // wrong
new Array(1+1).join('0') = "0"   // correct
new Array(2).join('0') = "0"     // wrong
new Array(2+1).join('0') = "00"  // correct

【讨论】:

  • +1 不正确,对吧?在他的示例中,它将是10 - 3 + 1 = 8,这将使整个字符串成为3 + 8 = 11
  • 啊,错过了。感谢您的澄清。
【解决方案2】:

当您加入包含N 元素的数组时,元素之间将有N-1 分隔符。代码使用join 创建一个只有N 分隔符的字符串,因此您需要给它一个包含N+1 元素的数组来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多