马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
<script>
var data = [
{
id: 1,
name: "家电",
goods: [
{
id: 11,
gname: "冰箱",
goods: [
{
id: 111,
gname: "海尔",
},
{
id: 112,
gname: "美的",
},
],
},
{
id: 12,
gname: "洗衣机",
},
],
},
{
id: 2,
name: "服饰",
},
];
function getID(jsonData, id) {
var o = {};
jsonData.forEach(function (item) {
if (item.id === id) {
o = item;
} else if (item.goods && item.goods.length > 0) {
getID(item.goods, id);
}
});
return o;
}
console.log(getID(data, 11));
</script>
以上代码 内层getID(item.goods, id);在进行递归时没有执行o = item;赋值这一步吗?为什么console.log(getID(data, 11))时不会得到对象结果
因为 o = item 操作只是在函数内部新定义一个局部变量而已,并不会改变外部的 o,
而闭包才可以改变外部函数的 o,也就是在函数里面定义新的 function:
对 getID 函数的修改如下: function getID(jsonData, id) {
var o = {};
function search(item) {
if (item.id === id) {
o = item;
} else if (item.goods && item.goods.length > 0) {
item.goods.forEach(function (subItem) {
search(subItem);
});
}
}
jsonData.forEach(function (item) {
search(item);
});
return o;
}
|