Javascript 如何通过过滤和修改其他对象动态创建对象而不更改层次结构?

Javascript 如何通过过滤和修改其他对象动态创建对象而不更改层次结构?,javascript,json,object,javascript-objects,Javascript,Json,Object,Javascript Objects,要创建嵌套对象,我们可以执行以下操作 function assign(obj, keyPath, value) { lastKeyIndex = keyPath.length-1; for (var i = 0; i < lastKeyIndex; ++ i) { key = keyPath[i]; if (!(key in obj)) obj[key] = {} obj = obj[key]; } obj[keyPath

要创建嵌套对象,我们可以执行以下操作

function assign(obj, keyPath, value) {
   lastKeyIndex = keyPath.length-1;
   for (var i = 0; i < lastKeyIndex; ++ i) {
     key = keyPath[i];
     if (!(key in obj))
       obj[key] = {}
     obj = obj[key];
   }
   obj[keyPath[lastKeyIndex]] = value;
}

Usage:

var settings = {};
assign(settings, ['Modules', 'Video', 'Plugin'], 'JWPlayer');
我想创建嵌套对象,该对象将在同一级别中有多个子对象

我有以下数据

{
    "children": [{
        "children": [{
            "children": [],
            "label": "A",
            "OrganizationId": 152,
            "id": 152
        }, {
            "children": [{
                "children": [{
                    "children": [],
                    "label": "B",
                    "OrganizationId": 180,
                    "id": 180
                }, {
                    "children": [],
                    "label": "C",
                    "OrganizationId": 181,
                    "id": 181
                }],
                "label": "D",
                "OrganizationId": 166,
                "id": 166
            }],
            "label": "E",
            "OrganizationId": 154,
            "id": 154

        }, {
            "children": [],
            "label": "F",
            "OrganizationId": 157,
            "id": 157
        }, {
            "children": [{
                "children": [{
                    "children": [],
                    "label": "G ",
                    "OrganizationId": 182,
                    "id": 182
                }],
                "label": "H",
                "OrganizationId": 167,
                "id": 167
            }],
            "label": "I",
            "OrganizationId": 155,
            "id": 155

        }]
    }]
}
所以我必须修改上面的对象

即仅拾取标签值并将其指定为新对象中的关键点 通过保持相同的层次结构(预期输出-如下)

预期输出:

{
    "A": "",
    "E": {
        "D": {
            "B": "",
            "C": ""
        }
    },
    "F": "",
    "I": {
        "H": {
            "G": ""
        }
    }
}
如果有人能为实现这一点提供提示或解决方案,这将是非常有帮助的。非常感谢

在投反对票之前,请告诉我这个问题有什么需要修改的地方或者有什么问题


谢谢

您可以使用以下代码来处理它:

函数getNestedLabels(objectToProcess){ var obj={}; if(Array.isArray(objectToProcess.children)&&objectToProcess.childrence.length>0){ 返回objectToProcess.children.reduce(函数(o,child){ o[child.label]=getNestedLabels(child); 返回o; },obj) }否则{ 返回“”; } }
函数getNestedLabels(objectToProcess){ var obj={}; if(Array.isArray(objectToProcess.children)&&objectToProcess.childrence.length>0){ 返回objectToProcess.children.reduce(函数(o,child){ o[child.label]=getNestedLabels(child); 返回o; },obj) }否则{ 返回“”; } } 变量d={ “儿童”:[{ “儿童”:[{ “儿童”:[…], “标签”:“A”, “组织ID”:152, “身份证”:152 }, { “儿童”:[{ “儿童”:[{ “儿童”:[…], “标签”:“B”, “组织ID”:180, “id”:180 }, { “儿童”:[…], “标签”:“C”, “组织ID”:181, “id”:181 }], “标签”:“D”, “组织ID”:166, “身份证”:166 }], “标签”:“E”, “组织ID”:154, “id”:154 }, { “儿童”:[…], “标签”:“F”, “组织ID”:157, “身份证”:157 }, { “儿童”:[{ “儿童”:[{ “儿童”:[…], “标签”:“G”, “组织ID”:182, “身份证”:182 }], “标签”:“H”, “组织ID”:167, “身份证”:167 }], “标签”:“我”, “组织ID”:155, “身份证”:155 }] }] };
console.log(getNestedLabels(d))您可以使用以下代码来处理它:

函数getNestedLabels(objectToProcess){ var obj={}; if(Array.isArray(objectToProcess.children)&&objectToProcess.childrence.length>0){ 返回objectToProcess.children.reduce(函数(o,child){ o[child.label]=getNestedLabels(child); 返回o; },obj) }否则{ 返回“”; } }
函数getNestedLabels(objectToProcess){ var obj={}; if(Array.isArray(objectToProcess.children)&&objectToProcess.childrence.length>0){ 返回objectToProcess.children.reduce(函数(o,child){ o[child.label]=getNestedLabels(child); 返回o; },obj) }否则{ 返回“”; } } 变量d={ “儿童”:[{ “儿童”:[{ “儿童”:[…], “标签”:“A”, “组织ID”:152, “身份证”:152 }, { “儿童”:[{ “儿童”:[{ “儿童”:[…], “标签”:“B”, “组织ID”:180, “id”:180 }, { “儿童”:[…], “标签”:“C”, “组织ID”:181, “id”:181 }], “标签”:“D”, “组织ID”:166, “身份证”:166 }], “标签”:“E”, “组织ID”:154, “id”:154 }, { “儿童”:[…], “标签”:“F”, “组织ID”:157, “身份证”:157 }, { “儿童”:[{ “儿童”:[{ “儿童”:[…], “标签”:“G”, “组织ID”:182, “身份证”:182 }], “标签”:“H”, “组织ID”:167, “身份证”:167 }], “标签”:“我”, “组织ID”:155, “身份证”:155 }] }] }; console.log(getNestedLabels(d))另一种方式:

function getNestedProperties(oldObj, newObj, property) {
  if (oldObj && typeof oldObj === "object") {
    let next = null;
    if (property in oldObj) {
      next = newObj[oldObj[property]] = {};
    }
    for (const key of Object.keys(oldObj)) {
      getNestedProperties(oldObj[key], next ? next : newObj, property);
    }
  }
}
const oldObject={
儿童:[
{
儿童:[
{
儿童:[],
标签:“A”,
组织ID:152,
身份证号码:152
},
{
儿童:[
{
儿童:[
{
儿童:[],
标签:“B”,
组织编号:180,
身份证号码:180
},
{
儿童:[],
标签:“C”,
组织编号:181,
身份证号码:181
}
],
标签:“D”,
组织编号:166,
身份证号码:166
}
],
标签:“E”,
组织ID:154,
身份证号码:154
},
{
儿童:[],
标签:“F”,
组织编号:157,
身份证号码:157
},
{
儿童:[
{
儿童:[
{
儿童:[],
标签:“G”,
组织编号:182,
身份证号码:182
}
],
标签:“H”,
组织ID:167,
身份证号码:167
}
],
标签:“我”,
组织编号:155,
身份证号码:155
}
]
}
]
};
函数getNestedProperties(oldObj、newObj、property){
if(oldObj&&typeof oldObj==“对象”){
设next=null;
if(oldObj中的属性){
next=newObj[oldObj[property]]={};
}
for(对象的常量键。键(oldObj)){
getNestedProperties(oldObj[key],下一个?下一个:newObj,property);
}
}
}
乐
function getNestedProperties(oldObj, newObj, property) {
  if (oldObj && typeof oldObj === "object") {
    let next = null;
    if (property in oldObj) {
      next = newObj[oldObj[property]] = {};
    }
    for (const key of Object.keys(oldObj)) {
      getNestedProperties(oldObj[key], next ? next : newObj, property);
    }
  }
}