对这段js递归函数有疑惑 请大家帮我看一下
<script>var data = [{
id: 1,
name: '家电',
goods: [{
id: 11,
gname: '冰箱',
goods: [{
id: 111,
gname: '海尔'
}, {
id: 112,
gname: '美的'
}, ]
}, {
id: 12,
gname: '洗衣机'
}]
}, {
id: 2,
name: '服饰'
}];
//11111111111111111111111111111111111
function getID(json, id) {
var o = {};
json.forEach(function(item) {
if (item.id == id) {
o = item;
return o;
} else if (item.goods && item.goods.length > 0) {
//困惑点--------------------------------------------------------------------------------------------
getID(item.goods, id);
}
});
return o;
};
//222222222222222222222222222222222222
function getID(json, id) {
var o = {};
json.forEach(function(item) {
if (item.id == id) {
o = item;
return o;
} else if (item.goods && item.goods.length > 0) {
//困惑点--------------------------------------------------------------------------------------------
o = getID(item.goods, id);
}
});
return o;
};
console.log(getID(data, 1));
console.log(getID(data, 2));
console.log(getID(data, 11));
console.log(getID(data, 12));
</script>
大佬帮我看一下 1和2里面的困惑点 为什么一定要用递归函数来更新一下o对象才能获取到最里面的值 我用断点发现o = item;这句已经把里面的值给了对象o了 但是打印不出来
1是错的 2是对的
return o;这句在最后面就行 前面的return o;是多余的
o = item;是为了最后可以return o
kogawananari 发表于 2020-10-28 23:23
1是错的 2是对的
return o;这句在最后面就行 前面的return o;是多余的
o = item;是为了最后可以return o
...
function getID(json, id) {
var o = {};
json.forEach(function(item) {
if (item.id == id) {
o = item;
} else if (item.goods && item.goods.length > 0) {
//困惑点--------------------------------------------------------------------------------------------
o = getID(item.goods, id);
}
});
return o;
};
大佬, o = getID(item.goods, id);为什么要接收这个递归函数来更新o对象呢。我断点发现o = item;这一句不是已经能把获取的内容添加到o对象里面了 最后通过return o;返回了一下就获取成功了 但最后打印就是不显示内层数组的内容 骑乌龟的小蜗牛 发表于 2020-10-29 08:49
function getID(json, id) {
var o = {};
json.forEach(function(item) {
let data = [{
id: 1,
name: '家电',
goods: [{
id: 11,
gname: '冰箱',
goods: [{
id: 111,
gname: '海尔'
}, {
id: 112,
gname: '美的'
}, ]
}, {
id: 12,
gname: '洗衣机'
}]
}, {
id: 2,
name: '服饰'
}];
const wrapper = function(){
let cengshu = 0
function getID(json, id) {
console.log(`进入第${++cengshu}层`)
let o = {};
json.forEach(function(item) {
if (item.id == id) {
o = item;
} else if (item.goods?.length) {
o = getID(item.goods, id);
}
});
console.log(`退出第${cengshu--}层`)
return o;
};
return getID
}
const getID = wrapper()
console.log(getID(data, 1));
console.log(getID(data, 2));
console.log(getID(data, 11));
console.log(getID(data, 12)); 由return o来一层层的接住 全部退出最外面的return才返回 kogawananari 发表于 2020-10-29 09:25
由return o来一层层的接住 全部退出最外面的return才返回
谢谢大佬解答{:5_109:}
页:
[1]