怎么在一个层级不定的数组里找出某一id的位置?

我现在是一个层级不定的 树 的数组。现在点击可以获取某一个id值(后面称为A),然后我需要对数组的A对象的属性值设为 isSelect = false;
有什么方法可以找到此对象呢?

数据格式大概是这样

{
    'name': aa,
    'id': 123,
    'isSelect': false
    subitem: [{
            'name': aa - 1,
            'id': 12345,
            'pid': 123,
            'isSelect': false,
            subitem: null
        },
        {
            'name': aa - 2,
            'id': 123456,
            'pid': 123,
            'isSelect': false,
            subitem: [
                'name': aa - 2 - 1,
                'id': 12345677,
                'pid': 123456,
                'isSelect': false,
                subitem: [
                    ...
                ]
            ]
        }
    ]

}
阅读 2.9k
3 个回答

        var arr = {
            'name': 'aa',
            'id': 123,
            'isSelect': false,
            subitem: [{
                    'name': 'aa - 1',
                    'id': 12345,
                    'pid': 123,
                    'isSelect': false,
                    subitem: null
                },
                {
                    'name': 'aa - 2',
                    'id': 123456,
                    'pid': 123,
                    'isSelect': false,
                    subitem: [{
                        'name': 'aa - 2 - 1',
                        'id': 12345677,
                        'pid': 123456,
                        'isSelect': true,
                    }]
                }
            ]

        }
        
        function findID(arr,id) {
                arr.map(el => {
                    if (el.id == id) {
                        el.isSelect = false
                        console.log(el)
                    } else {
                        if (el.subitem && el.subitem.length > 0) {
                            findID(el.subitem,id)
                        }
                    }
                })
            }
            
            
            //调用放在点击事件里
            document.getElementById('play').onclick = function () {
                  var id = 12345677
                findID(arr.subitem,id)
            }
//这样应该可以
let arr = {
  'name': 3,
  'id': 123,
  'isSelect': true,
  subitem: [{
    'name': 4,
    'id': 12345,
    'pid': 123,
    'isSelect': true,
    subitem: [{
      'name': 4,
      'id': 12346,
      'pid': 123,
      'isSelect': true,
      subitem: []
        }]
      }
  ]
}


function treeFind(tree, func) {
  if (!tree) return
  for (let data of tree) {
    if (func(data)) {
      data.isSelect = false
      return
    }
    if (data.subitem.length) {
       treeFind(data.subitem,func)
    }
  }
}

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