【问题标题】:modifying dictionary keys in Javascript在Javascript中修改字典键
【发布时间】:2018-04-18 22:03:57
【问题描述】:

我正在尝试为 n=3 动态创建一个看起来像这样的 n 暗淡对象 finalObj

children = { 'value1' : 'some1' , 'value2' : 'some2' , 'value3' :'some3' }

    item = { 'key1' : 'value1' , 'key2':'value2' , 'key3':'value3' }

基本上,生成的对象应该是这样的。

 finalObj  =  { parent : { 'some1' : { 'some2' : { 'some3':{} } } } } 

我在下面创建一个 n 深度的对象。

var parent ={} 
var finalObj

function makechildren( children, depth ){  
  if (depth>0){       
    makechildren({children}, depth-1);  
  }
  else
  { finalObj=children 
  console.log('finalObj',finalObj) 

  }
  return finalObj
 }

 Promise.resolve(makechildren(parent,4))
 .then(function(resp){
  console.log("resp is",resp); 
  })

打印出来:

{ "children": { "children": { "children": { "children": {} } } } }

现在,怎么转

parent.children.children.children

item ={'key1':'value1','key2':'value2','key3':'value3'}

进入

parent.children[ item['key1']].children[ item['key2']].children[ item['key3']] 

本质上是

parent.children['value1'].children['value2'].children['value3']....

我尝试制作原始字典的副本并使用循环更改键并将每个 parent.children[ item['key1']] 分配给多维字典的其余部分,但没有走得太远。

parent1 = JSON.parse(JSON.stringify(parent))
for (i in Object.keys(parent))
{ 
parent1[ item['key'+i] ] = parent.children
}

但是,我被困在这里如何以这种方式完成它。有什么想法吗?

【问题讨论】:

    标签: javascript dictionary key


    【解决方案1】:

    循环遍历item 中的值,使用每个值从children 中获取相应的值,并将其用作新对象的属性。要制作嵌套对象,请使用变量将对象保存在当前深度,每次循环都会更新。

    children = { 'value1' : 'some1' , 'value2' : 'some2' , 'value3' :'some3' };
    
    item = { 'key1' : 'value1' , 'key2':'value2' , 'key3':'value3' };
    
    finalObj = { parent: {} };
    
    var cur = finalObj.parent;
    Object.values(item).forEach(val => {
        cur[children[val]] = {};
        cur = cur[children[val]];
    });
    
    console.log(JSON.stringify(finalObj));

    请注意,从对象中读取的项目的顺序无法保证,因此无法保证这会以所需的顺序嵌套事物。如果你想保持顺序,你应该使用数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2019-07-18
      • 2018-07-10
      • 2020-03-14
      • 1970-01-01
      相关资源
      最近更新 更多