JavaScript-如何使用另一个对象作为引用来合并复杂的嵌套对象以进行迭代?
我有一个具有多个关键点的对象,形状如下:JavaScript-如何使用另一个对象作为引用来合并复杂的嵌套对象以进行迭代?,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我有一个具有多个关键点的对象,形状如下: { '.[key1].[key2].[key3]': {}, '.[key1].[key2].[key3].[key4]': {}, '.[key1].[key2].[key3].[key5]': {}, } 在这个例子中,很明显,为了创建这些键,我使用了一些引用生成了这段代码 下面是参考对象 const invoiceShape = { 'cfdi\\:CdfiRelacionados': { 'tfd\\
{
'.[key1].[key2].[key3]': {},
'.[key1].[key2].[key3].[key4]': {},
'.[key1].[key2].[key3].[key5]': {},
}
在这个例子中,很明显,为了创建这些键,我使用了一些引用生成了这段代码
下面是参考对象
const invoiceShape = {
'cfdi\\:CdfiRelacionados': {
'tfd\\:CfdiRelacionado': {},
},
'cfdi\\:Emisor': {},
'cfdi\\:Receptor': {},
'cfdi\\:Conceptos': {
'cfdi\\:Concepto': {
'cfdi\\:Impuestos': {
'cfdi\\:Traslados': {
'cfdi\\:Traslado': {},
},
'cfdi\\:Retenciones': {
'cfdi\\:Retencion': {},
},
'cfdi\\:InformacionAduanera': {},
'cfdi\\:CuentaPredial': {},
'cfdi\\:Parte': {
'cfdi\\:InformacionAduanera': {},
},
},
},
},
'cfdi\\:Complemento': {
'tfd\\:TimbreFiscalDigital': {},
},
'cfdi\\:Addenda': {},
};
我的物体看起来像这样
const invoiceParsed = {
'.cfdi\\:Conceptos.cfdi\\:Concepto.cfdi\\:Impuestos': {},
'.cfdi\\:Conceptos.cfdi\\:Concepto.cfdi\\:Impuestos.cfdi\\:Traslados': {},
'.cfdi\\:Conceptos.cfdi\\:Concepto.cfdi\\:Impuestos.cfdi\\:Retenciones': {},
}
invoiceShape对象的键上有空值,但现在invoiceParsed对象已填充,我希望它也填充invoiceShape,我发现解析每个嵌套级别会拆分。在invoiceParsed的键中,迭代引用对象是一种更有效的方法,但是如果我第二次迭代'cfdi\\:Conceptos'键,我只会覆盖键值,而不是合并它
我不会在迭代中发布任何代码,因为我想阅读您的想法、算法或软件包,您可以将其用作lodash。例如,我喜欢这样做,尽管这是处理深度嵌套数据的另一个优秀工具
这里有两个可行的解决方案。第一个使用Ramda中的几个函数。第二个主要是vanilla JS,只有来自Ramda的两个函数:
常量形状={
a:{
b:{
c:{}
}
},
d:{
e:{
f:{
g:{}
}
}
},
h:{}
}
已解析常量={
'a':{v:1},
'a.b':{v:2},
'a.b.c':{v:3},
'd':{v:4},
'd.e':{v:5},
'd.e.f':{v:6},
'd.e.f.g':{v:7},
'h':{v:8}
}
常量fillShapeWithParsed=s=>
右管
R.toPairs,
还原
acc[k,v]=>
R.overR.lensPathk.split'、R.mergev、acc、,
s
console.log
已解析的填充形状已分离
const merge=x=>y=>{…y,…x}
常量fillShapeWithParsedVanilla=s=>p=>
Object.esp.reduce
acc[k,v]=>
R.overR.lensPathk.split'',合并,附件,
s
console.log
已解析的圆角形状已解析的圆角形状
请在问题本身中提供样本输入、样本输出,并清楚地标明。现在还不清楚您发布的内容的意义,或者指向XML异地链接的内容!!。逃跑的人怎么了?你到底想在这里做什么?我没有在迭代中发布任何代码,因为我想了解你的想法,这不是这个网站的工作方式。对不起,这是我的第一个问题,谢谢你的耐心,我会破解如何问这个问题,不管花多长时间我不理解覆盖的问题,但是,如果值在第二个对象结构中,为什么仍然需要第一个呢?你就不能从第二个开始重新生成它吗?有什么可以合并的?很高兴我能帮上忙!透镜为处理深度嵌套的数据提供了强大的抽象。这只是一个简单的例子。另外,如果您有关于Ramda或partial.lens的快速问题,每个都有一个gitter房间:&。StackOverflow上还有ramda和partial.lents标签。