求修改一js方法 附Demo

题目描述

N层级嵌套父子级(相对)处理:若传入参数为某一父级ID,则将其checked连同子级checked设为false;如果传入参数为子级ID,则将其checked为false,若此子级无兄弟(或兄弟均checked均为false),则父checked为false;反之...

题目来源及自己的思路

/**

  • 方法
  • 层级 N层级
  • 结果:返回新的数组对象 - exceptId === id 将checked设为false 关联 父级

*/

function resetData(list, exceptId) {
  if (Array.isArray(list) && list.length !== 0) {
    list = list.map(item => {
      if (item.id === exceptId) {
        item.checked = false;
        if (Array.isArray(item.children)) {
          item.children = item.children.map(it => it = { ...it, checked: false });
        }
      } else if (Array.isArray(item.children)) {
        resetData(item.children, exceptId);
      }
      return item;
    });
    return list;
  } else {
    return false;
  }
}
console.log(resetData(arr, 70));

相关代码

粘贴代码文本(请勿用截图)

const arr = [
  {
    "id": 3,
    "name": "标题1",
    "children": [
      {
        "id": 4,
        "name": "1-1",
        "children": null
      }
    ]
  },
  {
    "id": 5,
    "name": "标题2",
    "children": [
      {
        "id": 6,
        "name": "2-1",
        "children": null
      },
      {
        "id": 7,
        "name": "2-2",
        "children": [
          {
            "id": 70,
            "name": "2-1-1",
            "checked": true,
            "children": null
          }
        ]
      }
    ]
  },
  {
    "id": 8,
    "name": "标题3",
    "children": [
      {
        "id": 9,
        "name": "3-1",
        "checked": true,
        "children": null
      }
    ]
  }
];

你期待的结果是什么?实际看到的错误信息又是什么?

例如:传入参数70,则父7为false
console.log(resetData(arr, 70));

例如:传入参数5,则父5、6、7、70均为false
console.log(resetData(arr, 70));

阅读 1.1k
1 个回答

你的方法跟arr变量都不对应呀,key和isLeaf都没有。 应该把key改为id,把isLeaf改为children吧
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题