繁体   English   中英

如何用 Ramda.js 压平嵌套的 object?

[英]How to flatten a nested object with Ramda.js?

有没有一种使用Ramda.js的方法,通过它我可以有一个嵌套的 object,它可以将多个属性转换为 output 中提到的 arrays 数组?

请注意,这些values始终出现在索引34中,其中我们有214等值。 output 数组长度应为 map 到input object 键长度。

 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 ] ]

输入是按具有 2 个级别的数据分组的。 我想让它变平。 现在,对于每个代码,它都按年龄段分组,然后按月份分组。 我希望第一个和第二个索引先出现,然后 rest 都应该展开。

我不明白获取 json 格式的 arrays 的模式,但要接收 arrays 的数组,创建一个 function 获取每个内部数组的索引 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"]

参考资料: slice , pipe , map , flatten

使用香草 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))

有没有一种使用Ramda.js的方法,通过它我可以拥有一个嵌套的 object,它可以将多个属性转换为 arrays 的数组,如 output 中所述?

请注意,这些values始终存在于索引34中,其中我们有214等值。 output 数组长度应从 map 到input object 密钥长度。

 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 ] ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM