删除javascript中JSON对象的重复键,以不同的方式构造JSON

删除javascript中JSON对象的重复键,以不同的方式构造JSON,javascript,json,Javascript,Json,我试图通过删除重复的键来改变json的结构。否则,将相同名称的子节点仅放在一个名称节点中 当前JSON: { "name": "flare", "children": [ { "name": "analytics", "children": [ { "name": "cluster", "children"

我试图通过删除重复的键来改变json的结构。否则,将相同名称的子节点仅放在一个名称节点中

当前JSON:

{
    "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,这对我来说有点困难。你的解决方案解决了我的问题,再次感谢。