【问题标题】:JavaScript String.split on a string literal to produce an arrayJavaScript String.split 在字符串文字上生成一个数组
【发布时间】:2015-01-27 02:18:57
【问题描述】:

我见过一些 javascript 程序员使用这种模式来生成一个数组:

"test,one,two,three".split(','); // => ["test", "one", "two", "three"]

他们没有拆分用户输入或一些包含字符串值的变量,他们拆分硬编码的字符串文字以生成一个数组。在所有情况下,我都看到了像上面这样的一行,似乎只使用数组文字而不依赖split 从字符串创建数组是完全合理的。上述创建数组的模式是否有意义,或者比简单地使用数组字面量更有效?

【问题讨论】:

  • 我想不出有什么正当理由会选择拆分字符串而不是手动构建数组,除非它可能会减少击键次数。
  • 我不得不认为这只是懒惰 - 输入数组需要很多特殊字符并为所有引号按住 shift 键。我输入第一个版本的速度可能是第二个版本的两倍以上。
  • 你可以尝试在代码审查中向好人提出这个问题
  • 对短元素特别有用:var alphabet = "abcdefghijklmnopqrstuvwxyz".split("") 而不是 ["a", "b", …]
  • @Crazysheep 这就是我尽可能喜欢单引号的部分原因。

标签: javascript arrays string split


【解决方案1】:

在运行时拆分字符串而不是使用数组字面量时,您正在用少量的执行时间换取少量的带宽。

在大多数情况下,我认为这不值得。如果您在发布代码as you should be 之前对代码进行压缩和压缩,则在字符串中使用单个逗号与在数组中的两个字符串中使用引号-逗号-引号对节省带宽几乎没有影响。事实上,经过压缩和 gzip 压缩后,使用拆分字符串的版本可能会更长,因为添加了可压缩性较低的 .split(',')

拆分字符串而不是创建字符串的数组文字确实意味着更少的输入,但我们spend more time reading code than writing it。将来使用数组文字将更易于维护。如果你想给数组中的一个项目添加一个逗号,你只需将它作为另一个字符串添加到数组文字中;使用split,您将不得不使用不同的分隔符重写整个字符串。

我使用split 和字符串文字来创建数组的唯一情况是,如果我需要一个仅包含单个字符(即字母、数字或字母数字字符等)的数组。

var letters = 'abcdefghijklmnopqrstuvwxyz'.split(''),
  numbers = '0123456789'.split(''),
  alphanumeric = letters.concat(numbers);

您会注意到我使用concat 创建alphanumeric。如果我将lettersnumbers 的内容复制粘贴到一个长字符串中,则此代码会更好地压缩。我没有这样做的原因是,那将是一个会损害未来可维护性的微优化。如果将来需要将带有重音符号、波浪线或变音符号的字符添加到字母列表中,可以将它们添加到一个位置;也无需记住将它们复制粘贴到alphanumeric

拆分字符串可能对code golf 有用,但在生产环境中,缩小和压缩是因素,编写易于阅读、可维护的代码很重要,只使用数组文字几乎总是更好的选择。

【讨论】:

    【解决方案2】:

    例如,在 ruby​​ 中,数组 ["test", "one", "two", "three"]

    也可以写成%w(test one two three),这样可以节省你输入的一些字符。

    但是javascript不支持这种表示法,所以有人用split方法来实现。

    【讨论】:

      【解决方案3】:

      如果大量的数组是手动构建的。由于传输的字符更少,它可能会减少页面的加载时间。但是您需要大量数组或大型数组才能产生相当大的差异。数组创建的性能可能会较慢,但键入速度会更快。对于大型数组,我使用电子表格通过像这样的公式应用每个值的格式 ="'"&A1&"',"。我坚持使用数组字面量。

      【讨论】:

        【解决方案4】:

        当您无法控制输出时,使用“split”方法更有意义,即。方法的用户输入或字符串输出。如果您试图在输出中获取由某物分隔的特定值,则使用 split 方法更容易。当然,如果您要控制这些值,它并不总是有意义的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-12-09
          • 2021-02-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多