有此代码
const myMagic = (one, two, three, four) => `this is ${one} and ${two} and ${three} and ${four} as usual`
const txt = 'HELLO&ho&hy&hu&hq&HELLO&ho&hy&hu&hq&HELLO&ho&hy&hu&hq&HELLO&ho&hy&hu&hq&hx'
const fragments = txt.split('&')
const pieces = []
for (let i=0; i<fragments.length-1;i +=5) {
pieces.push(fragments[i])
pieces.push(myMagic(fragments[i+1],fragments[i+2],fragments[i+3],fragments[i+4]))
}
pieces.push(fragments[fragments.length-1])
console.log(pieces)
如何将其转换为更具声明性的版本?
代码就像这样,因为拆分采用的是一个仅对文本进行一次解析的正则表达式,然后使用这些片段,通过
myMagic
函数构建所需数量的组件那么,有什么方法可以在不改变逻辑的情况下以更具声明性的方式编写此代码?
最佳答案
您始终可以使用递归函数遍历列表:
const myMagic = (one, two, three, four) => `this is ${one} and ${two} and ${three} and ${four} as usual`
function pieces([zero, ...rest]) {
if (!rest.length)
return [zero];
const [one, two, three, four, ...more] = rest;
return [zero, myMagic(one, two, three, four), ...pieces(more)];
}
const txt = 'HELLO&ho&hy&hu&hq&HELLO&ho&hy&hu&hq&HELLO&ho&hy&hu&hq&HELLO&ho&hy&hu&hq&hx';
console.log(pieces(txt.split('&')))
我建议尽管使用某种
chunk(5)
函数,并在其结果上使用flatMap
。