出于搜索目的,给定像 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循环来实现它。
你会如何解决这个问题?
最佳答案
老实说,我会按照你的方式编写代码。两个循环可读、可维护且快速。
如果您确实需要一个单线:
s.split(" ").flatMap(word => Array.from(word, (_, i) => word.slice(0, i + 1)))
关于JavaScript:使用reduce函数的句子变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57357795/