繁体   English   中英

使用Ramda将以点分隔的键/值对展开为嵌套对象

[英]Unflatten a dot-separated key/value pair into a nested object using Ramda

Ramda食谱在此说明如何将嵌套对象转换为点分隔的展平对象。 我是Ramda的新手,我想学习如何进行上述相反的操作。

它将转换此对象:

{
  "company.name": "Name is required",
  "solarSystemInfo.name": "Name is required",
  "installer.business.name": "slkdfj is required"
}

至,

{
  "company": {
    "name": "Name is required"
  },
  "solarSystemInfo": {
    "name": "Name is required"
  },
  "installer": {
    "business": {
      "name": "slkdfj is requried"
    }
  }
}

使用纯JS的工作小提琴在这里

这可以通过以下方法来实现:使用R.toPairs将对象拆分为对,然后通过拆分每个对象上的键将每个对象对“ R.toPairs ”为一个对象. 进入列表,并将其作为R.assocPath的路径R.assocPath以构建对象。 这将产生一个对象列表,然后可以使用R.mergeAll将它们合并在一起。

 const data = { "company.name": "Name is required", "solarSystemInfo.name": "Name is required", "installer.business.name": "slkdfj is required" } const pathPairToObj = (key, val) => R.assocPath(R.split('.', key), val, {}) const unflattenObj = R.pipe( R.toPairs, R.map(R.apply(pathPairToObj)), R.mergeAll ) console.log(unflattenObj(data)) 
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script> 

使用Reduce可以避免使用多个键覆盖对象。

 const data = { "company.name": "Name is required", "solarSystemInfo.name": "Name is required", "installer.business.name": "Reg. name is required", "installer.business.code": "NYSE code is required" } const buildObj = (acc,value) => { [key,val]=value; return R.assocPath(R.split('.', key), val, acc); } const unflattenObj = R.pipe( R.toPairs, R.reduce(buildObj,{}) ); console.log(unflattenObj(data)); 
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script> 

从“使用Reduce可以避免使用多个键覆盖对象”。

如果您在Typescript项目上并且具有“找不到键”或“ val” ...,则可以使用:

 const data = { "company.name": "Name is required", "solarSystemInfo.name": "Name is required", "installer.business.name": "Reg. name is required", "installer.business.code": "NYSE code is required" } const buildObj = (acc, value) => { const [key,val] = value return R.assocPath(R.split('.', key), val, acc); } const unflattenObj = R.pipe( R.toPairs, R.reduce(buildObj,{}) ) console.log(unflattenObj(data)) 
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script> 

暂无
暂无

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

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