87,922
社区成员
发帖
与我相关
我的任务
分享
var data = [
{
"sort": 0,
"id": 2,
"children": [
{
"sort": 0,
"id": 5,
"children": [
{
"sort": 99,
"id": 17,
"children": [],
"pid": 5,
"text": "a"
},
{
"sort": 98,
"id": 18,
"children": [],
"pid": 5,
"text": "b"
},
{
"sort": 97,
"id": 19,
"children": [],
"pid": 5,
"text": "c"
}
],
"pid": 2,
"text": "d"
},
{
"sort": 0,
"id": 6,
"children": [
{
"sort": 0,
"id": 36,
"children": [],
"pid": 6,
"text": "e"
}
],
"pid": 2,
"text": "f"
},
{
"sort": 0,
"id": 7,
"children": [
{
"sort": 99,
"id": 37,
"children": [],
"pid": 7,
"text": "g"
}
],
"pid": 2,
"text": "h"
}
],
"pid": 0,
"text": "i"
}
];
function formatCate() {
var a= traverse(data, 19);
console.log(a); //控制台输出null
return a;
};
function traverse(jsonObj, val) {
for (var i in jsonObj) {
if (typeof jsonObj[i] == "object") {
if (jsonObj[i].hasOwnProperty("id")) {
if (jsonObj[i].id == val) {
console.log(jsonObj[i].text); //控制台 输出 c
return jsonObj[i].text;
}
}
traverse(jsonObj[i], val); //1. 此处如果用 return traverse(jsonObj[i], val); 无法获取到 id为19的text,正常递归也应该用return
}
}
return null;
}
function traverse(jsonObj, val) {
for (var i in jsonObj) {
if(typeof jsonObj[i] == "object") {
if(jsonObj[i].id == val) {
alert(jsonObj[i].text); //控制台 输出 c
return jsonObj[i].text;
}
var t = traverse(jsonObj[i].children, val);
if(t != null) return t;
}
}
return null;
}
function get_text(obj,id){
if(obj){
for(var i = obj.length;i--;){
if(obj[i].id == id){
console.log(obj);
return obj[i].text || "";
}
var a = get_text(obj[i].children,id);
if(a){return a}
}
}
}
console.log(get_text(data,37));
alert(digui(data,7));
function digui(data,id){
for(var i in data){
if(data[i]["id"]==id)
return data[i]["text"];
if(data[i]["children"].length>0){
digui(data[i]["children"],id);
}
}
}
traverse(jsonObj[i], val)
改成arguments.callee(jsonObj[i], val)
试试看