函数中return 无法退出函数的问题
1.发现并解决问题
在函数中,一般return就会退出函数,然而今天上班遇到了一个问题,就是return 不退出函数。 我想要从一个数组中获取我想要的oid,但是打印出来undefind,我发现它是进入了if (id === searchId)这个判断条件的,但是下面的条件也有执行,那我就不让他执行好了,给下面条件改为if (!result&&child && child.length > 0) ,这样就可以获取到正确的oid了。问题是解决了,但是不太清楚怎么产生的。
2.查找问题的根源
这是因为递归函数相当于是一层一层的函数嵌套在一起,所以其中的一个return只是但是那一层函数的返回,只是退出了当前层函数。 代码如下:
const obj = [
{
id: 96,
child: [
{
id: 92,
oid: '222221',
child: [
{
id: 168,
oid: '222222',
child: [
{
id: 91,
oid: '222223',
child: [
{
id: 93,
oid: '222224',
child: [
{
id: 94,
oid: '222225',
}],
}]
}],
}]
},
{
id: 101,
oid: '222231',
child: [
{
id: 160,
oid: '222232',
child: [
{
id: 191,
oid: '222233',
}],
}]
},
]
}
]
function searchById(list, searchId) {
let result;
for (let i = 0; i < list.length; i++) {
const { id, child, oid} = list[i];
if (id === searchId) {
result = oid;
// console.log(result,1);
return result
}
if (child && child.length > 0) {
const res = searchById(child, searchId);
result = res;
// console.log(result,2);
}
}
// // console.log(result,123);
return result;
}
console.log(searchById(obj[0].child, 168))