删除javascript中JSON对象的重复键,以不同的方式构造JSON
我试图通过删除重复的键来改变json的结构。否则,将相同名称的子节点仅放在一个名称节点中 当前JSON:删除javascript中JSON对象的重复键,以不同的方式构造JSON,javascript,json,Javascript,Json,我试图通过删除重复的键来改变json的结构。否则,将相同名称的子节点仅放在一个名称节点中 当前JSON: { "name": "flare", "children": [ { "name": "analytics", "children": [ { "name": "cluster", "children"
{
"name": "flare",
"children": [
{
"name": "analytics",
"children": [
{
"name": "cluster",
"children": [
{
"name": "AgglomerativeCluster",
"size": [
"3938"
]
}
]
}
]
},
{
"name": "analytics",
"children": [
{
"name": "cluster",
"children": [
{
"name": "CommunityStructure",
"size": [
"3812"
]
}
]
}
]
}
]
}
{
"name": "flare",
"children": [
{
"name": "analytics",
"children": [
{
"name": "cluster",
"children": [
{
"name": "AgglomerativeCluster",
"size": 3938
},
{
"name": "CommunityStructure",
"size": 3812
}
]
}
]
}
]
};
所需输出:
{
"name": "flare",
"children": [
{
"name": "analytics",
"children": [
{
"name": "cluster",
"children": [
{
"name": "AgglomerativeCluster",
"size": [
"3938"
]
}
]
}
]
},
{
"name": "analytics",
"children": [
{
"name": "cluster",
"children": [
{
"name": "CommunityStructure",
"size": [
"3812"
]
}
]
}
]
}
]
}
{
"name": "flare",
"children": [
{
"name": "analytics",
"children": [
{
"name": "cluster",
"children": [
{
"name": "AgglomerativeCluster",
"size": 3938
},
{
"name": "CommunityStructure",
"size": 3812
}
]
}
]
}
]
};
感谢您的帮助。通常情况下,StackOverflow不是让人为您编写代码的地方,您的问题应该更具体,您的算法的哪一部分有问题。然而,这看起来很有趣,所以我做了 我首先将其转换为一个对象,该对象的属性是名称,值是子对象/大小。这确保了每个命名实例都与其他命名实例分组
var mutate = function(desired, current) {
for (var x = 0; x < current.length; x++) {
if (Object.hasOwnProperty.call(current[x], 'size')) {
desired[current[x].name] = parseInt(current[x].size[0], 10);
}
else {
if (!Object.hasOwnProperty.call(desired, current[x].name)) {
desired[current[x].name] = Object.create(null);
}
mutate(desired[current[x].name], current[x].children);
}
}
return desired;
};
您可以使用这个可怕的野兽来获得您的结果:
var desiredJson = mutate2(mutate(Object.create(null), [ currentJson ]));
console.log(desiredJson);
通常,StackOverflow不是让人们为您编写代码的地方,您的问题应该更具体,您的算法的哪一部分有问题。然而,这看起来很有趣,所以我做了 我首先将其转换为一个对象,该对象的属性是名称,值是子对象/大小。这确保了每个命名实例都与其他命名实例分组
var mutate = function(desired, current) {
for (var x = 0; x < current.length; x++) {
if (Object.hasOwnProperty.call(current[x], 'size')) {
desired[current[x].name] = parseInt(current[x].size[0], 10);
}
else {
if (!Object.hasOwnProperty.call(desired, current[x].name)) {
desired[current[x].name] = Object.create(null);
}
mutate(desired[current[x].name], current[x].children);
}
}
return desired;
};
您可以使用这个可怕的野兽来获得您的结果:
var desiredJson = mutate2(mutate(Object.create(null), [ currentJson ]));
console.log(desiredJson);
你具体需要什么帮助?你知道迭代数组和对象并访问它们的基础知识是什么吗?您需要帮助开发算法来执行此操作吗?您尝试过什么吗?基本上可能重复的
var groupedByName=groupBy(json.children,'name')
您具体需要什么帮助?你知道迭代数组和对象并访问它们的基础知识是什么吗?您需要帮助开发算法来执行此操作吗?你试过什么了吗?基本上是var-groupedByName=groupBy(json.children,'name')的可能重复项
谢谢你的回答。我试了几件事。但由于我以前从未使用过javascript,这对我来说有点困难。你的解决方案解决了我的问题,再次感谢。谢谢你的回答。我试了几件事。但由于我以前从未使用过javascript,这对我来说有点困难。你的解决方案解决了我的问题,再次感谢。