|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
|
|