javascript - lambda : Duplicate an object by its (array) property

标签 javascript functional-programming ramda.js

我有一个具有数组属性 { property: [a, b] } 的对象,并且我想要一个重复对象的列表,其中 [{ property: [a] }, { 属性: [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 的浅拷贝。如果输入有多个级别,这会变得有点复杂。

我们可以为它编写一个函数

const transform = input =>
  input.locales.map(locale => ({...input, locales:[locale]}))

console.log(transform({
  url: 'getting-started',
  locales: ['en-GB', 'en-JP']
}))

关于javascript - lambda : Duplicate an object by its (array) property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50174431/

相关文章:

kotlin - Kotlin 中序列的查找和转换

haskell - 在整数列表中搜索,按增长排序的最长有序子集(不一定是连续的)之一

javascript - 一个可以在 Javascript 中组合和链接(点符号)的函数

javascript - 在 Typescript 中为 Ramda 组合/管道函数声明类型

javascript - 按父 ids 对象 Ramda 分组数组

javascript - 在angularjs中单击按钮显示一个div并隐藏其他div

javascript - 语义 UI 动态下拉列表重新初始化问题

javascript - 如何在 Vuetify(版本 >= 2.0)中单击时突出显示 v-data-table 中的行?

php - fabric js 或 imagick 从图像中删除白色

f# - 解析分层 CSV 的功能方法