我有一个树形结构对象,例如
var x = [{
id: 1,
children: [{
id: 11,
children: [],
}, {
id: 12,
children: [{
id: 121,
name:'jogn',
children: []
}]
}]
}, {
id: 2,
children: [],
}]
我想在其中找到具有特定ID的对象。我做了
function printObj(obj , val) {
for( var i = 0; i < obj.length ; i++){
if( obj[i].id == val){
return obj[i];
}
if( obj[i].children.length > 0 ){
printObj( obj[i].children)
}
}
}
功能。问题是当我调用它时
var g = printObj(x , 121);
alert(x.name)
它返回undefined而不是jogn altought当我弹出一些警告如果它找到它确实找到它的设定值。为什么它会返回错误的对象呢?
答案 0 :(得分:3)
这一行有两个问题:
printObj( obj[i].children);
它缺少第二个参数
如果找到
所以
var possibleResult = printObj( obj[i].children, val);
// -------------------------------------------^^^^^
if (possibleResult) {
return possibleResult;
}
另外,在您的测试中,您查找了x.name
您想要的地方g.name
。
修正:
var x = [{
id: 1,
children: [{
id: 11,
children: [],
}, {
id: 12,
children: [{
id: 121,
name: 'jogn',
children: []
}]
}]
}, {
id: 2,
children: [],
}];
function printObj(obj, val) {
for (var i = 0; i < obj.length; i++) {
if (obj[i].id == val) {
return obj[i];
}
if (obj[i].children.length > 0) {
var possibleResult = printObj(obj[i].children, val);
if (possibleResult) {
return possibleResult;
}
}
}
}
var g = printObj(x, 121);
console.log(g.name);
&#13;
答案 1 :(得分:0)
Ramda非常适用于功能方法的对象和列表工作 - 这是您遍历的数据 -
var x = [{ id: 1, children: [{ id: 11, children: [], }, { id: 12, children: [{ id: 121, name: 'jogn', children: [] }] }] }, { id: 2, children: [], }] const findById = (id, list) => map(o => { if(o.id === id) return o return findById(id, o.children) }, list) head(flatten(findById(121, x)))