当前位置: 首页 > 面试题库 >

带有父ID的单元的分层json

阎鸿煊
2023-03-14
问题内容

http://jsfiddle.net/eYgGK/

我从另一个帖子中偷走了这个脚本:

 function convertToHierarchy() {
var arry = [{ "Id": "1", "Name": "abc", "Parent": "", "attr": "abc" },
               { "Id": "2", "Name": "abc", "Parent": "1", "attr": "abc" },
               { "Id": "3", "Name": "abc", "Parent": "2", "attr": "abc" },
               { "Id": "4", "Name": "abc", "Parent": "2", "attr": "abc" }];
        var nodeObjects = createStructure(arry);
        for (var i = nodeObjects.length - 1; i >= 0; i--) {
            var currentNode = nodeObjects[i];
            if (currentNode.value.Parent === "") {
                continue;
            }
            var parent = getParent(currentNode, nodeObjects);

            if (parent === null) {
                continue;
            }

            parent.children.push(currentNode);
            nodeObjects.splice(i, 1);
        }
        console.dir(nodeObjects);
        return nodeObjects;
    }
    function createStructure(nodes) {
        var objects = [];

        for (var i = 0; i < nodes.length; i++) {
            objects.push({ value: nodes[i], children: [] });
        }

        return objects;

    }
    function getParent(child, nodes) {
        var parent = null;

        for (var i = 0; i < nodes.length; i++) {
            if (nodes[i].value.Id === child.value.Parent) {
                return nodes[i];
            }
        }

        return parent;
    }

该脚本产生:

[{
    "value": {
        "Id": "1",
        "Name": "abc",
        "Parent": "",
        "attr": "abc"
    },
    "children": [{
        "value": {
            "Id": "2",
            "Name": "abc",
            "Parent": "1",
            "attr": "abc"
        },
        "children": [{
            "value": {
                "Id": "4",
                "Name": "abc",
                "Parent": "2",
                "attr": "abc"
            },
            "children": []
        }, {
            "value": {
                "Id": "3",
                "Name": "abc",
                "Parent": "2",
                "attr": "abc"
            },
            "children": []
        }]
    }]
}]

我正在寻找的是:

[{
    "Id": "1",
    "Name": "abc",
    "Parent": "",
    "attr": "abc",
    "children": [{

        "Id": "2",
        "Name": "abc",
        "Parent": "1",
        "attr": "abc",
        "children": [{

            "Id": "4",
            "Name": "abc",
            "Parent": "2",
            "attr": "abc"
        }, {

            "Id": "3",
            "Name": "abc",
            "Parent": "2",
            "attr": "abc"

        }]
    }]
}]

我首先需要摆脱“值”包装,其次是空的子节点。我知道我可以编写一个清理脚本,但是那不是最佳实践。如果有人知道如何修复或建议其他脚本,那就太好了!

谢谢


问题答案:

尝试类似的东西

var arry = [{ "Id": "1", "Name": "abc", "Parent": "", "attr": "abc" },
               { "Id": "2", "Name": "abc", "Parent": "1", "attr": "abc" },
               { "Id": "3", "Name": "abc", "Parent": "2", "attr": "abc" },
               { "Id": "4", "Name": "abc", "Parent": "2", "attr": "abc" }];

function convert(array){
    var map = {};
    for(var i = 0; i < array.length; i++){
        var obj = array[i];
        obj.items= [];

        map[obj.Id] = obj;

        var parent = obj.Parent || '-';
        if(!map[parent]){
            map[parent] = {
                items: []
            };
        }
        map[parent].items.push(obj);
    }

    return map['-'].items;

}

var r = convert(arry)

演示:小提琴

结果

[{
    "Id" : "1",
    "Name" : "abc",
    "Parent" : "",
    "attr" : "abc",
    "children" : [{
                "Id" : "2",
                "Name" : "abc",
                "Parent" : "1",
                "attr" : "abc",
                "children" : [{
                            "Id" : "3",
                            "Name" : "abc",
                            "Parent" : "2",
                            "attr" : "abc",
                            "children" : []
                        }, {
                            "Id" : "4",
                            "Name" : "abc",
                            "Parent" : "2",
                            "attr" : "abc",
                            "children" : []
                        }]
            }]
}]


 类似资料:
  • 问题内容: 我有一些用PHP生成的元素,我想知道是否可以选择ID不完整的元素,例如: 该类已经习惯了它们的共同点,但是现在我需要单独选择它们,但我不知道整个ID名称。 我可以使用类似: 问题答案: 不使用ID选择器,因为它们需要完整的ID名称,但使用substring属性选择器: 但是,既然您的元素仍然具有属性,那么为什么不向每个元素组添加一个通用类并按该类进行选择呢?您应该能够像生成ID一样使用

  • 这里会有什么问题吗? 这是我的主要类和我的main.xml,以及我使用的一个相关类(您还会在底部找到错误日志) 主类 main.xml

  • 问题内容: 我有一个带有字段的“页面”对象列表。此父字段引用列表中的另一个对象。我想基于此字段从此列表创建树层次结构。 这是我原始列表的样子: 我想将其转换为这样的树结构: 我希望可以在任何时候针对任意列表调用的可重用函数。有人知道解决这个问题的好方法吗?任何帮助或建议,将不胜感激! 问题答案: 小提琴

  • 我想将 UI 表视图与不同的自定义表视图单元一起使用。我的3个单元格是这样的: Cell1:应该有一个图像和一个标签。 Cell2:应该有两个标签。 Cell3:应该有一天选择器。 我不想为单元格编写标签代码。我如何在Swift中管理这些?我必须为每个单元格编写自己的类吗?我可以使用一个tableviewController吗?如何在不同的单元格中填充数据? 我想生成一个表视图,就像iOS设备的联

  • 我正在编写一个应用程序,它需要用不同的度量单位来跟踪不同数量的东西。 我希望在javax.measure的帮助下存储这个度量数据,并使用来自Tec.Units的参考实现 这里的问题是Panache/Mongo似乎不知道如何处理数据类型。例如: 对于(lombok生成的)/中的对象,我也遇到了以下错误: 我想知道这里的核心问题是否也是一样的。 我想绕过这个问题的一种方法是简单地将字符串值映射到库中的

  • 我试过很多东西,也在网上搜索过,但我找不出这个问题的解决方案。 我有一个div容器,它有max-height,min-height和overflow:auto。当内部内容大于max-height时,会按预期出现滚动条。但是,在内容内部有一个下拉列表,点击该下拉列表时,菜单会展开,它不是显示在父容器外部,而是改变了内部内容的高度。 我在网上找到的唯一可行的解决方案是用相对定位将容器包装到div,并使