<script type="text/javascript">
var arr = [
{"id":1,"parent_id":0,"name":"Foods"},
{"id":2,"parent_id":1,"name":"Fruits"},
{"id":3,"parent_id":2,"name":"apple"},
{"id":4,"parent_id":2,"name":"orange"},
{"id":5,"parent_id":2,"name":"tomato"},
{"id":6,"parent_id":1,"name":"Vegetables"},
{"id":7,"parent_id":6,"name":"carrot"},
{"id":8,"parent_id":6,"name":"cabbage"},
{"id":9,"parent_id":6,"name":"potato"},
{"id":10,"parent_id":6,"name":"lettuce"},
{"id":11,"parent_id":0,"name":"Cars"}
];
function convert(rows){
// 判断传入的父类ID是否在数组里面
function exists(rows, parent_id){
for(var i=0; i<rows.length; i++){
if (rows[i].id == parent_id)
return true;
}
return false;
}
var nodes = [];
// 获取所有一级分类
for(var i=0; i<rows.length; i++){
var row = rows[i];
if (!exists(rows, row.parent_id)){
nodes.push({
id:row.id,
text:row.name
});
}
}
// 将一级分类放入待处理数组中
var toDo = [];
for(var i=0; i<nodes.length; i++){
toDo.push(nodes[i]);
}
while(toDo.length){
// 逐个弹出
var node = toDo.shift();
// 查找它的下级分类
for(var i=0; i<rows.length; i++){
var row = rows[i];
// 如果是它的下级分类则放入 children 数组中
if (row.parent_id == node.id){
var child = {id:row.id,text:row.name};
if (node.children){
node.children.push(child);
} else {
node.children = [child];
}
// 将当前分类放入待处理数组中
toDo.push(child);
}
}
}
return nodes;
}
console.log(convert(arr));
</script>
Javascript 数组转无限级分类(非递归)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...