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,并使