Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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 - Fatal编程技术网

Javascript 如何将一个对象的极深道具的路径映射到具有其他道具的新对象?

Javascript 如何将一个对象的极深道具的路径映射到具有其他道具的新对象?,javascript,Javascript,如何将以下对象的路径映射到一个新对象,该对象具有访问深度嵌套属性的路径&同时添加一些其他属性 const obj = { key1: { level1: { level2: { prop1: {}, prop5: {} } } }, key2: { level1: { level2: { prop2: {} } } }, key3: { level1: { prop3: {}, prop6: {}, prop7: {} } }, key4:

如何将以下对象的路径映射到一个新对象,该对象具有访问深度嵌套属性的路径&同时添加一些其他属性

    const obj = {
      key1: { level1: { level2: { prop1: {}, prop5: {} } } },
      key2: { level1: { level2: { prop2: {} } } },
      key3: { level1: { prop3: {}, prop6: {}, prop7: {} } },
      key4: { level1: { level2: { level3: { prop4: {} } } } },
    };

为此:

    const expectedObj = {
      key1Level1Level2Prop1: { path: "key1.level1.level2.prop1", name: "Prop 1", id: (Math.random() * 1000000).toFixed(0) },
      key2Level1Level2Prop2: { path: "key2.level1.level2.prop2", name: "Prop 2", id: (Math.random() * 1000000).toFixed(0) },
      key3Level1Prop3: { path: "key3.level1.prop3", name: "Prop 3", id: (Math.random() * 1000000).toFixed(0) },
      key4Level1Level2Level3Prop4: { path: "key4.level1.level2.level3.prop4", name: "Prop 4", id: (Math.random() * 1000000).toFixed(0) },
      key1Level1Level2Prop5: { path: "key1.level1.level2.prop5", name: "Prop 5", id: (Math.random() * 1000000).toFixed(0) },
      key3Level1Prop6: { path: "key3.level1.prop6", name: "Prop 6", id: (Math.random() * 1000000).toFixed(0) },
      key3:evel1Prop7: { path: "key3.level1.prop7", name: "Prop 7", id: (Math.random() * 1000000).toFixed(0) },
    };
请注意,最末端的所有道具都映射到此处 i、 例如,prop1位于key1的最深级别,因此在expectedObj中映射为
prop1:{path:…}

因此,所有极深的道具(都是空对象)都应该映射到预期的结果中


请注意,每个级别最末端的所有道具都是空对象{}

您可以使用递归:

const obj={
键1:{level1:{level2:{prop1:{},prop5:{}},
键2:{level1:{level2:{prop2:{}}},
键3:{level1:{prop3:{},prop6:{},prop7:{},
键4:{level1:{level2:{level3:{prop4:{}}},
};
函数findextermenodes(obj){
返回Object.entries(obj).reduce((res[k,v])=>{
如果(!Object.keys(v).length){//Extreme节点
res[k]={path:k,name:capitalized(k),id:getRandomId()};
}else{//子树
Object.entries(findextremodes(v)).forEach([k2,v2])=>{
res[k+大写(k2)]={…v2,路径:k+'.+v2.path};
});
}
返回res;
}, {});
}
函数(str){
返回str.match(/[a-z]+|[^a-z]+/gi).map(大写).join(“”);
}
函数大写(str){
返回str[0].toUpperCase()+str.slice(1);
}
函数getRandomId(){
返回(Math.random()*1000000).toFixed(0);
}
常数res=findExtremeNodes(obj);

document.body.innerHTML=''+JSON.stringify(res,0,4)+''你能不能也回答这个问题:好的,我贴了一个答案