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);
}
}
}