代码是:
const _ = require('lodash');
const output = [];
let i = 0;
const inputString = "/h1/h2/h3/h4";
_.forEach(inputString.split('/').filter(e => e), (f, key, res) => {
if (i < res.length - 1 ) {
output.push(`/${_.slice(res, 0, i += 1).join('/')}`);
}
});
console.log(output);
期望的输出是数组,并跳过最后一个:['/ h1','/ h1 / h2','/ h1 / h2 / h3']
我如何简化它?非常感谢!
答案 0 :(得分:1)
一个选择是将字符串split
放入h
中,在第一个位置切空字符串,最后切入pop()
。然后,通过.map
先将索引0到0,然后从0到1,再从0到2,依次类推,依次join
:
const inputString = "/h1/h2/h3/h4";
const items = inputString.split('/').slice(1); // slice to remove empty string at [0]
items.pop(); // remove last item (h4)
const output = items.map((_, i) => '/' + items.slice(0, i + 1).join('/'));
console.log(output);
不需要外部库
正如评论所指出的,另一种方法是找到/
的所有索引:
const inputString = "/h1/h2/h3/h4";
const slashIndicies = [...inputString].reduce((a, char, i) => {
if (char === '/') a.push(i);
return a;
}, []);
// ignore first leading slash:
slashIndicies.shift();
const output = slashIndicies.map((slashIndex) => inputString.slice(0, slashIndex));
console.log(output);
答案 1 :(得分:0)
作为一种变体:
'use strict';
const inputString = '/h1/h2/h3/h4';
const arr = [...inputString].reduce((acc, ch) => {
if (ch === '/') acc.push(`${acc[acc.length - 1] || ''}${ch}`);
else acc[acc.length - 1] += ch;
return acc;
}, []).slice(0, -1);
console.log(arr);