【发布时间】:2017-11-23 23:33:36
【问题描述】:
我正在使用 Ramda 为一些数据提供结构。但是,我一直无法访问compose 中的数据。
- 它应该映射
level大于 2 的项目,但这不起作用
[keys, compose(map(map(find(propEq('level', > 2)))), values)]
- 我正在尝试将
typeChild中的所有项目保留为unique。
这是用于测试它的 ramda 控制台(必须通过那里的链接,所以不允许 goo.gl 链接):http://dpaste.com/0SATTZK
const result = pipe(
pluck('type'),
groupBy(
pipe(
find(propEq('level', 1)),
propOr('NoLevel', 'name'),
)
),
converge(
zipWith(unapply(zipObj(['name', 'typeChild']))),
[keys, compose(map(map(find(propEq('level', 2)))), values)]
),
);
result(data)
输入数据
[{
"title": "Apple",
"type": [{"name": "Food", "level": 1}, {"name": "Fruit", "level": 2}]
}, {
"title": "Tomato",
"type": [{"name": "Food", "level": 1}, {"name": "Fruit", "level": 2}]
}, {
"title": "Potato",
"type": [{"name": "Food", "level": 1}, {"name": "Vegetable", "level": 2}]
}, {
"title": "The Alchemist",
"type": [{"name": "Entertainment", "level": 1}, { "name": "Book", "level": 2}]
}, {
"title": "Superman",
"type": [{"name": "Entertainment", "level": 1}, {"name": "Movie", "level": 2}]
}, {
"title": "More facts",
"type": [{"name": "Foo", "level": 2}]
}, {
"title": "Superman",
"type": [{"name": "Bar", "level": 1}]
}
];
期望的输出
[
{name: "Food", typechild: [{level: 2, name: "Fruit"}, {level: 2, name: "Vegetable"}]},
{name: "Entertainment", typechild: [{level: 2, name: "Book"}, {level: 2, name: "Movie"}]},
{name: "NoName", typechild: [{level: 2, name: "Foo"}]},
{name: "Bar", typechild: []}
]
【问题讨论】:
-
请在问题本身中包含一些数据结构的描述。外部链接作为附加信息很好,但问题应该能够独立存在。
-
我有几个问题。 (1) “访问
compose中的数据”是什么意思? (2) 你想过滤什么? (goo .gl /VuBdR5) 有propEq('level', 1)和propEq('level', 2),但没有像propEq('level', > 2)这样的东西(反正不是真正的JS。)(3)(最根本的是),你一般想做什么?我知道您想更改数据的形状,但是您要过滤掉什么,其余的将是什么形状?你介意完全失去'title'属性吗?当你的compose/pipe的第一步是pluck('type')时会发生这种情况? -
更新了问题以便澄清,但感谢您的出色回应。
标签: javascript ramda.js