を使用すると、ファイルに次のデータを持っている想像:解析構造化データ(例えば変異なし)
Group1
Thing1
Thing2
Group2
Thing1
Thing2
Thing3
Group3
Group4
Thing1
これは、ファイルを介してライン・バイ・ラインをループする「パーサ」を書くのは簡単です、きちんとそれぞれのグループごとにグループ化され、オブジェクトにすべてのThing
Sを書いて、その後(変数)現在Group
を覚えると:私を与える
// 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'
],
...
}
純粋に機能的な方法でgroups
とcurrentGroup
に変更することなくこれを達成する最良の方法は何ですか? Array.reduce
をもっと見てみる必要がありますか?これは、ArrayをObjectに変換するためのいくつかの(IMHOでは、あまり気にしない)ユースケースを見たことがあるか、ここで役に立たないのですか?
*何も変わらないことを意味しますか?グループをグループ化して次の部分をグループ化する必要があります。 –
私は、既存の**値を変更するのではなく、変更されたコピーを作成することについて話していました。これは機能プログラミングのパラダイムの典型です。たとえば、 'let person = {name: 'Nina'}の代わりに。 person.lastName = 'Scholz''、 'const person = {name:' Nina '}が好きです。 const personNew = Object.assign({}、person、{lastName: 'Scholz'}) ' –
これは簡単に再帰で実現できます。現在のエンジンは再帰のために最適化されていません(TCOなし)。だからあなたは、提案された解決策に忠実に従う。 – ftor