gpt4 book ai didi

javascript - 如何使用函数式编程风格的reduce来解析YAML前端内容?

转载 作者:太空宇宙 更新时间:2023-11-04 03:28:10 25 4
gpt4 key购买 nike

我想用 Javascript 解析一个文件:

---
title: This is a great title
date: 2012-03-02 11:30:00 -04:00
published: false
---

data_one
data_two
data_three

由此,我只想输出:

['data_one', 'data_two', 'data_three']

这意味着我需要跳过前五行。

虽然我可以轻松地让我的脚本自动跳过前五行,但我希望它足够强大,即使其中添加了额外的项目,它也会跳过前面的内容。这是我当前的实现:

const result = rawFileStr.split('\n')
.reduce((acc, item) => {
const endOfFrontMatter = acc === false && item === '---';
const isFrontMatter = acc === false || item === '---';

if (endOfFrontMatter) {
return [];
}

return isFrontMatter ? false : acc.concat(item)
}, [])

它基本上将累加器设置为 false 以指示它命中第一个 ---,然后在命中第二个 --- 时,它返回一个空数组。

它有效,但是所有这些 if 语句让我觉得这不是执行此操作的“功能方式”。有人可以阐明如何使用纯函数式编程来做到这一点吗?

最佳答案

您可以使用正则表达式按行进行分割,直到第一个 --- 不在第一行上,然后获取其余部分:

const result = rawFileStr.split(/^[^]*?\n---\n/).pop().split('\n');

// Sample data
const rawFileStr = `---
title: This is a great title
date: 2012-03-02 11:30:00 -04:00
published: false
---
data_one
data_two
---
data_three`;

const result = rawFileStr.split(/^[^]*?\n---\n/).pop().split('\n');
console.log(result);

或者,如果没有正则表达式,您可以使用立即调用的函数表达式,该表达式使用第一个 --- 出现的索引后面的项目(不在第一行上)对数组进行切片:

const result = (items => items.slice(items.indexOf('---',1)+1))(rawFileStr.split('\n'));

// Sample data
const rawFileStr = `---
title: This is a great title
date: 2012-03-02 11:30:00 -04:00
published: false
---
data_one
data_two
---
data_three`;

const result = (items => items.slice(items.indexOf('---',1)+1))(rawFileStr.split('\n'));
console.log(result);

关于javascript - 如何使用函数式编程风格的reduce来解析YAML前端内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41776509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com