【发布时间】:2018-10-14 21:53:26
【问题描述】:
我有一个具有数组属性{ property: [a, b] } 的对象,我想要一个重复对象列表,其中[{ property: [a] }, { property: [b] }]
输入是:
const input = {
url: 'getting-started',
locales: ['en-GB', 'en-JP']
}
预期形式是:
const expected = [{
url: 'getting-started',
locales: ['en-GB']
}, {
url: 'getting-started',
locales: ['en-JP']
}]
我写的函数有点不可读,甚至不纯:
const duplicateByLocales = article => R.pipe(
R.prop('locales'),
R.invert,
R.mapObjIndexed((val, locale) =>
R.pipe(
R.clone,
R.assoc('locales', R.of(locale))
)(article)),
R.values
)(article)
它确实有效,但我很好奇更好的方法是什么样的?谢谢!
【问题讨论】:
-
我已编辑您的问题以修复代码格式。为了将来参考,SO 不使用通常的降价约定进行格式化:代码块通过将所有内容缩进 4 个空格来标记(我知道,这很奇怪)。您还可以突出显示代码块并按 ctrl-k(在 mac 上为 cmd-k),它会为您完成。
-
为什么输出有
locales: ['en-GB']而不是locale: 'en-GB'? -
@ScottSauyet 你说得对,应该是
locale: 'en-GB'!我的疏忽
标签: javascript functional-programming ramda.js