【发布时间】:2019-12-23 22:43:44
【问题描述】:
我正在尝试学习一些有关函数式编程和 Ramda 的知识,并且正在使用我最喜欢的旧数据结构操作来尝试一些无意义的东西。很少或没有循环。我的输入数据:
const data = [{
timeline_map: {
"2017-05-06": 770,
"2017-05-07": 760,
"2017-05-08": 1250,
}
}, {
timeline_map: {
"2017-05-06": 590,
"2017-05-07": 210,
"2017-05-08": 300,
}
}, {
timeline_map: {
"2017-05-06": 890,
"2017-05-07": 2200,
"2017-05-08": 1032,
}
}]
期望的输出:
[
["2017-05-06", 770, 590, 890, ...],
["2017-05-07", 760, 210, 2200, ...],
["2017-05-08", 1250, 300, 1032, ...]
]
这是我的代码:
const condense = x => x.timeline_map
var rest = []
const pluckDate = (obj, i) => {
return [Object.keys(obj)[i]]
}
const getValues = value => {
data.map(function () {
return data.timeline_map
})
}
const result = R.compose(
R.values,
R.mapObjIndexed(pluckDate),
R.map(condense)
)
console.log(result(data))
到目前为止,我得到的只是提取的日期:
[["2017-05-06"], ["2017-05-07"], ["2017-05-08"]]
这离解决方案还很远并且我什至不知道我是否以“好”的方式完成了它。解决这个问题的“功能”/“ramda”/“无点”方法是什么?
【问题讨论】:
-
Object.entries([].concat(...data.map(i => Object.entries(i.timeline_map))).reduce((acc, [k, v]) => Object.assign({}, acc, { [k]: k in acc ? acc[k].concat(v) : [v] }), {})).map(([k, v]) => [k, ...v])--- 只是为了好玩——纯 ES 解决方案 -
我确实发现了最后一点的能力 --
.map(k, v) => [k, ...v]-- ES6 最好的特性之一
标签: javascript data-structures functional-programming ramda.js