Ramda:通过其(数组)属性复制对象

海洋奥兹格

我有一个具有array属性的对象{ 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']
}))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章