【问题标题】:How to flatten a nested object with Ramda.js?如何使用 Ramda.js 展平嵌套对象?
【发布时间】:2020-11-17 05:02:52
【问题描述】:

有没有一种使用Ramda.js 的方法,通过它我可以拥有一个嵌套对象,该对象可以将多个属性转换为输出中提到的数组数组?

请注意,values 始终存在于索引 34 中,其中我们有 214 等值。输出数组长度应映射到input 对象键长度。

const input = {
  "002004": {
    "25-34 Years": {
      "Jul-20": [
        [
          "Jul-20",
          "002004",
          "002004 - No Description",
          21,
          4,
          "25-34 Years"
        ]
      ],
      "Jun-20": [
        [
          "Jun-20",
          "002004",
          "002004 - No Description",
          25,
          8,
          "25-34 Years"
        ]
      ]
    },
    "35-44 Years": {
      "Jul-20": [
        [
          "Jul-20",
          "002004",
          "002004 - No Description",
          3,
          10,
          "35-44 Years"
        ]
      ],
      "Jun-20": [
        [
          "Jun-20",
          "002004",
          "002004 - No Description",
          4,
          12,
          "35-44 Years"
        ]
      ]
    }
  }
};
console.log(input);
const output = [
  [
    "002004",
    "002004 - No Description",
    21,
    4,
    25,
    8,
    3,
    10,
    4,
    12
  ]
]

【问题讨论】:

  • 您是否尝试过遍历输入级别以获取每个嵌套数组的第 3 和第 4 个值?
  • 感谢 deltazero。我可以通过添加循环来做到这一点,但我想知道使用 ramda 是否可以在功能上而不是命令式地实现它
  • 您介意详细说明您要做什么吗?
  • 当然..输入是按2级数据分组的...我希望它被展平...现在对于每个代码,它都按年龄段分组,然后一个月...我想要第一个和第二个索引首先出现,其余的都应该在此之后传播
  • @SiddharthPal 你可以使用常规的 JavaScript 数组方法吗?

标签: javascript algorithm functional-programming ramda.js flatten


【解决方案1】:

我不了解获取该 json 格式数组的模式,但要接收数组数组,创建一个函数来获取每个内部数组的索引 3 和 4,然后将所有结果展平为一个新数组,我们可以试试这个:

const getIndexes3and4 = slice(3, 5)
const getIndexesAndFlatten = pipe(map(getIndexes3and4), flatten)
const input = [['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e']]
console.log(getIndexesAndFlatten(input)) // ["d", "e", "d", "e", "d", "e"]

参考:slicepipemapflatten

【讨论】:

    【解决方案2】:

    使用原生 javascript

    const input =   {"002004": { "25-34 Years": { "Jul-20": [ [ "Jul-20", "002004", "002004 - No Description", 21, 4, "25-34 Years" ] ], "Jun-20": [ [ "Jun-20", "002004", "002004 - No Description", 25, 8, "25-34 Years" ] ] }, "35-44 Years": { "Jul-20": [ [ "Jul-20", "002004", "002004 - No Description", 3, 10, "35-44 Years" ] ], "Jun-20": [ [ "Jun-20", "002004", "002004 - No Description", 4, 12, "35-44 Years" ] ] } }};
    function flatten(obj){
          return Object.entries(input).flatMap(o=>{
            neso=Object.values(o[1])
            arr=neso.flatMap(o=>Object.values(o).flat())
            n=arr.flatMap((o)=>[o[3],o[4]])
            des=arr.flatMap((d)=>[d[1],d[2]])
            set=new Set(des)
             return [...set,...n]
          })
    }
    console.log(flatten(input))

    【讨论】:

      猜你喜欢
      • 2017-01-21
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 2017-10-19
      • 2017-07-02
      • 2020-12-22
      • 2011-09-19
      相关资源
      最近更新 更多