要创建嵌套对象,我们可以像下面这样做
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');
这将导致这个
"{"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": ""
}
}
}
如果有人可以提供实现此功能的提示或解决方案,那将会有很大帮助。我们将不胜感激!
请在投反对票之前,告诉我这个问题需要编辑什么或者有什么问题。
谢谢!
最佳答案
您可以使用以下代码来处理它:
function getNestedLabels(objectToProcess) {
var obj = {};
if (Array.isArray(objectToProcess.children) && objectToProcess.children.length > 0) {
return objectToProcess.children.reduce(function(o, child) {
o[child.label] = getNestedLabels(child);
return o;
}, obj)
} else {
return '';
}
}
<小时/>
function getNestedLabels(objectToProcess) {
var obj = {};
if (Array.isArray(objectToProcess.children) && objectToProcess.children.length > 0) {
return objectToProcess.children.reduce(function(o, child) {
o[child.label] = getNestedLabels(child);
return o;
}, obj)
} else {
return '';
}
}
var d = {
"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
}]
}]
};
console.log(getNestedLabels(d))
关于javascript - 如何通过过滤和修改其他对象来动态创建对象而不改变层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52178247/