我如何将嵌套数组与ramda的新对象合并?

时间:2016-12-15 10:19:09

标签: ramda.js

有一个对象包含与UI相关的变量。

const data = [
  { color: [{ primary: "#444", secondary: "#dede", light: "#fff" }] },
  { size: [12,14,16,18,20] },
  ...
];

我想让这个对象成为一个单独的数组,如:

const UI = [
    { colorPrimary: "#444" },
    { colorSecondary: "#dede" },
    { colorLight: "#fff" },
    { size0: 12 },
    { size1: 14 },
    { size2: 16 },
    { size3: 18 },
    { size4: 20 },
    ...
];

如何使用ramda执行此操作?

1 个答案:

答案 0 :(得分:1)

由于我的评论中表达的原因,我没有一个干净的方法来处理所提供的数据:

  

你如何区分像color这样的属性,你似乎忽略了保存数据的数组,以及像size这样的属性,其中数组索引成为键的一部分?

但只需稍微调整一下您的数据,就可以了:

const data = [
  { color: { primary: "#444", secondary: "#dede", light: "#fff" } },
  { size: [12,14,16,18,20] },
];

这是相当简单的:

const initialCap = str => toUpper(head(str)) + tail(str);

const collectProps = pipe(
  map(map(toPairs)),
  apply(merge),
  mapObjIndexed((pairs, key) => map(
    pair => objOf(key + initialCap(pair[0]), pair[1]), pairs
  )),
  values,
  apply(concat)
);

collectProps(data);

您可以在 Ramda REPL 上看到这一点。

我对您的数据来源一无所知,所以我不知道您是否可以管理这些数据。但如果可以的话,这看起来应该可行。