如何简化节点脚本

时间:2019-02-09 05:15:11

标签: node.js

代码是:

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']

我如何简化它?非常感谢!

2 个答案:

答案 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);