Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-如何使用另一个对象作为引用来合并复杂的嵌套对象以进行迭代?_Javascript_Node.js_Ecmascript 6 - Fatal编程技术网

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标签。