首页 > 解决方案 > JavaScript:使用 reduce 函数的句子变体

问题描述

出于搜索目的,给定一个字符串,例如BBC Sport我想构造一个如下所示的数组:

[ 'BBC', 'BB', 'B', 'Sport', 'Spor', 'Spo', 'Sp', 'S' ]

我已经使用 2 个 for 循环来实现它:

const s     = "BBC sport";
const tags  = [];
const words = s.split(" ");

for (let word of words) {
  const wl = word.length;
  for (let i = 0; i < wl; i++) {
    tags.push(word.substr(0, wl - i));
  }
}

// tags now equals [ 'BBC', 'BB', 'B', 'Sport', 'Spor', 'Spo', 'Sp', 'S' ]

但是,如果可能的话,我想用 reduce 函数而不是 for 循环来实现它。

你会怎么解决?

标签: javascriptalgorithmreduce

解决方案


老实说,我会按照您的方式编写代码。两个循环可读、可维护且快速。

如果你真的需要一个单行:

  s.split(" ").flatMap(word => Array.from(word, (_, i) => word.slice(0, i + 1)))

推荐阅读