徒手实现 ES8 的 String.prototype.padEnd() 和 String.prototype.padStart() 方法

阅读时长 4 分钟读完

在 ES8 中,JavaScript 引入了 String.prototype.padEnd()String.prototype.padStart() 方法,它们可以让我们更方便地将一个字符串填充到指定的长度。在本文中,我们将手动实现这两个方法,并探讨实现的细节和技巧。

实现 padEnd() 方法

padEnd() 方法可以将一个字符串填充到指定的长度,如果指定长度小于当前字符串的长度,则返回原始字符串。具体用法如下:

我们可以用以下代码实现 padEnd() 方法:

-- -------------------- ---- -------
----------------------- - ---------------------- ---------- -
  ------------ - ------------------------- -- -- ------------ -----
  --------- - ---------------- -- - --- -- ------ -----------------
  -- ------------ - ------------- -
    ------ -------------
  -
  ------------ -- ------------
  -- ------------- - ----------------- -
    -- ------------- --------- --------
    --------- -- ----------------------------- - ------------------
  -
  ------ ------------ - ------------------ --------------
--

首先我们检查 targetLength,如果它不是一个整数,我们就将其截断。然后检查是否传了 padString,如果没有指定,默认使用空格填充。

然后我们检查原始字符串的长度是否大于 targetLength,如果是,就返回原始字符串。否则,我们计算填充的数量,以便为输入字符串添加填充。

由于我们不想一直重复 padString 的字符,我们要检查填充字符串的长度是否比所需的长度短。如果是,我们就将其复制到长度足够,最后将其添加到原始字符串的末尾,返回构造的新字符串。

实现 padStart() 方法

padStart() 方法与 padEnd() 方法类似,不同之处在于它将填充字符串添加到字符串的开头而不是结尾。具体用法如下:

我们可以以下代码实现 padStart() 方法:

-- -------------------- ---- -------
------------------------- - ---------------------- ---------- -
  ------------ - -------------------------
  --------- - ---------------- -- - ---
  -- ------------ - ------------- -
    ------ -------------
  -
  ------------ -- ------------
  -- ------------- - ----------------- -
    --------- -- ----------------------------- - ------------------
  -
  ------ ------------------ ------------- - -------------
--

这个方法和 padEnd() 方法非常相似,除了在字符串末尾添加字符外,它在字符串开头添加字符。

总结

在本文中,我们介绍了如何手动实现 ES8 中的 padEnd()padStart() 方法。我们了解了如何处理 targetLength 和 padString 的默认值,如何检查填充字符串的长度,以避免重复计算,并演示了如何在字符串的末尾或开头添加填充字符。

虽然这些方法看起来很简单,但在某些情况下,它们可以极大地简化代码,使代码更易于阅读和理解。现在我们已经手动实现了它们,我们更好地理解了它们的细节和算法,并且知道如果需要在没有这些方法的情况下手动执行此操作,我们可以使用什么方法和技巧。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cb6cd45ad90b6d04208007

纠错
反馈