javascript - 如何使用 javascript 和 json 查找组的所有叶子

标签 javascript json d3.js

我想列出组名称为“group110”的所有叶子 ID 因此,此示例的输出为 014、288、223 和 244。

这是我的 JSON 文件的内容:

{
 "name": "visualization",
 "children": [
        {
         "name": "group100",
         "children": [
                {
                 "name": "group110",
                 "children": [
                        {
                         "name": "group111",
                         "children": [
                                        {"id":"014","link":"-","name":" Animals/70","decade":"-"}
                                ]
                        },
                        {
                         "name": "group112",
                         "children": [
                                        {"id":"288","link":"-","name":"Heidelberg platen press","decade":"1960s"}
                                ]
                        },
                        {
                         "name": "group113",
                         "children": [
                                        {"id":"223","link":"-","name":"Camera Praktica Super TL – shutter release","decade":"1960s"},
                                        {"id":"244","link":"-","name":"Mechanical calculator, Facit","decade":"1950s"}
                                ]
                        }
                        ]
                },

最佳答案

试试这个方法。使用递归方法查找组并使用另一种递归方法收集叶节点。

function getLeafNodes(leafNodes, obj){
    if(obj.children){
        obj.children.forEach(function(child){getLeafNodes(leafNodes,child)});
    } else{
        leafNodes.push(obj);
    }
}

function findIds(json,name){ 
   if(json.children){       
        if(json.name==name)  {
           var leafNodes = [];   
           getLeafNodes(leafNodes,json);
           console.log(leafNodes.map(function(leafNode){ return leafNode.id; })); //Logs leaf node ids to the console
        } else {
           json.children.forEach(function(child){                               
              findIds(child,name);
           });      
        }   
   }
}

执行以下代码将打印["014", "288", "223", "244"]

findIds(actualJSON,"group110");

关于javascript - 如何使用 javascript 和 json 查找组的所有叶子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27740649/

相关文章:

jquery - 最后一列标题文本使用数据表垂直对齐

java - 向错误的端点发出请求

regex - 无法使具有负向先行的正则表达式修复 JSON 中的未转义引号

javascript 类实例处理事件不一致 - this/范围界定困惑

javascript - 如何将输入框旁边的 div 放在焦点上?

javascript - 如何使所有图像适合相同大小的div

javascript - 编写条件以添加属性

javascript - 如何让 Observable.flatMap 等待解析

javascript - 在回调函数中使用 for 循环执行动画

D3.js x 轴时间刻度