【问题标题】:Is it possible to split a string that has spaces with the spread operator?是否可以使用扩展运算符拆分包含空格的字符串?
【发布时间】:2021-04-11 13:31:04
【问题描述】:

而不是使用.split(" ") 来对这个字符串使用扩展运算符:快速的棕色狐狸跳过了懒狗

【问题讨论】:

  • 您必须修改 String.prototype[Symbol.iterator] 以实现这不是一个好的做法
  • [..."STRING"] 给你["S","T","R","I","N","G"]

标签: javascript


【解决方案1】:

您可以通过像这样覆盖 String.prototype[Symbol.iterator] 来做到这一点,但覆盖 JavaScript 的本机对象并不是一种好的做法:

String.prototype[Symbol.iterator] = function* () {
  const split = this.split(' ');
  for(const word of split) {
    yield word;
  }
}

const result = [...'The quick brown fox jumped over the lazy dog.'];

console.log(result);

最短变体(感谢@georg):

String.prototype[Symbol.iterator] = function* () {
  yield* this.split(' ');
}

const result = [...'The quick brown fox jumped over the lazy dog.'];

console.log(result);

简单地从Array.prototype.values返回迭代器的其他变体:

String.prototype[Symbol.iterator] = function () {
  return this.split(' ').values();
}

const result = [...'The quick brown fox jumped over the lazy dog.'];

console.log(result);

【讨论】:

  • 我认为自己非常擅长 Javascript 和 Typescript,Promises、async/await、类和所有这些东西都没有问题,但我还没有完全理解生成器和 yield 是什么,或者他们的目的是什么。我不明白上面这段代码到底发生了什么(但因为它正在工作,我仍然赞成:)
  • @Guerric P,我也投了赞成票。任何参考如何深入了解javascript?
  • 啊,谢谢!在我看来这不是最难理解的,只是我们很少使用的东西,我想如果你玩它你会很快掌握它
  • @PawanSharma 如果你像我一样喜欢 JavaScript,那就自己阅读文档并进行实验吧,我不知道有什么更好的学习方法!
  • 只需yield *this.split(' ')
【解决方案2】:

您可以修改String.prototype[Symbol.iterator],但不推荐

我所做的只是创建了一个数组words,方法是拆分一个空格并将变量count初始化为0

现在我返回一个函数next(这是在迭代时调用的函数)。当此函数 next 返回一个具有属性 done 设置为 true 的对象时,迭代停止。

因此,当第一次调用next 时,下面的代码将返回{done: false, value: "The"},因此最后一次调用next 将返回{done: true},这将停止执行。

String.prototype[Symbol.iterator] = function() {
  let words = this.split(" ");
  let count = 0
  return {
    next() {
      if (count < words.length) {
        return {done: false, value: words[count++]}
      }
      return {done: true}
    }
  }
}

console.log([..."The quick brown fox jumped over the lazy dog"])

根据 GEORG 在 cmets 中的建议,您可以简单地返回 this.split(' ').values()

.values() 将返回一个迭代器,而字符串将简单地使用这个迭代器。但要了解迭代器的工作原理,请查看第一个示例。

String.prototype[Symbol.iterator] = function() {
  return this.split(" ").values()
}

console.log([..."The quick brown fox jumped over the lazy dog"])

【讨论】:

  • 只需return this.split(' ').values() ;)
  • 酷! .values() 将返回一个迭代器本身。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
相关资源
最近更新 更多