gpt4 book ai didi

javascript - 以功能方式解析结构化数据(例如,不改变)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:05 26 4
gpt4 key购买 nike

假设您的文件中有以下数据:

Group1
Thing1
Thing2
Group2
Thing1
Thing2
Thing3
Group3
Group4
Thing1

很容易编写一个逐行遍历文件的“解析器”,记住当前的 Group(在一个变量中),然后写入所有的 Thing 到一个对象,按各自的组整齐地分组:

// Very naive implementation for illustrative purposes only
let groups = {}
let currentGroup = null
data
.split(/\n/)
.forEach(entry => {
const matches = entry.match(/^(Group\d+)$/)
if (matches) {
currentGroup = matches[1]
groups[currentGroup] = []
} else {
groups[currentGroup].push(entry.trim())
}
})

这给了我:

{
Group1: [
'Thing1', 'Thing2'
],
Group2: [
'Thing1', 'Thing2', 'Thing3'
],
...
}

在不改变 groupscurrentGroup 的情况下,以纯函数方式实现此目标的最佳方法是什么?我是否需要更仔细地研究一下 Array.reduce,因为我已经看到一些(恕我直言,相当令人难以置信)用例将数组转换为对象,或者不会帮忙吗?

最佳答案

是的,你想在这里使用reduce:

data
.split(/\n/)
.reduce(({groups, currentGroup}, entry) => {
const matches = entry.match(/^(Group\d+)$/)
if (matches) {
groups[matches[1]] = []
return {currentGroup: matches[1], groups};
} else {
groups[currentGroup] = groups[currentGroup].concat([entry.trim()]);
return {currentGroup, groups};
}
}, {groups: {}, currentGroup: null})
.groups

但是,在JS中并没有合理的方法来创建一个没有变异的 map 对象。只要您将属性分配保留在本地,就没有问题。

关于javascript - 以功能方式解析结构化数据(例如,不改变),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42107896/

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