Ramda:通过其(数组)属性 复制一个对象
Ramda: Duplicate an object by its (array) property
我有一个包含数组 属性 { 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)
它确实有效,但我很好奇更好的方法是什么?谢谢!
你可以这样做:
const input = {
url: 'getting-started',
locales: ['en-GB', 'en-JP']
}
let result = input.locales.map(locale => ({...input, locales:[locale]}));
console.log(result);
请记住,{...input}
创建了 input
的浅表副本。如果 input
有多个级别,这会变得有点复杂。
我们可以为它写一个函数
const transform = input =>
input.locales.map(locale => ({...input, locales:[locale]}))
console.log(transform({
url: 'getting-started',
locales: ['en-GB', 'en-JP']
}))
我有一个包含数组 属性 { 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)
它确实有效,但我很好奇更好的方法是什么?谢谢!
你可以这样做:
const input = {
url: 'getting-started',
locales: ['en-GB', 'en-JP']
}
let result = input.locales.map(locale => ({...input, locales:[locale]}));
console.log(result);
请记住,{...input}
创建了 input
的浅表副本。如果 input
有多个级别,这会变得有点复杂。
我们可以为它写一个函数
const transform = input =>
input.locales.map(locale => ({...input, locales:[locale]}))
console.log(transform({
url: 'getting-started',
locales: ['en-GB', 'en-JP']
}))