多维数组如何通过id查找?


    Element:[
        name:'一类'
        child:[
                {name:'第一个',id:'123456'}
            ]
    ]

我现在知道一个id为123456,想要通过id来找到对应的对象{name:'第一个',id:'123456'}
第一个能想到的就是两个for循环嵌套,请问有什么更好更简洁的写法吗

阅读 3.1k
4 个回答

一般来说是都是通过递归来查找,如果使用频率不高的话,但是效率一般都比较低。

如果说使用频率比较高,我一般都是转换成 Map 数据,然后通过 get 去获取。
比如说:

var arrayData = []
var mapData = new Map()
// 获取远程数据
fetchRemoteData(params).then(res=>{
   arrayData = res.data
   loopSet(arrayData)
}
function loopSet(data){
  if(!data || !data.length) return
  for(let item of data) {
    mapData.set(item.id, item)
    if(item.child && item.child.length) loopSet(item.child)
  }
}  
// 在需要使用的地方直接 .get + id 就可以获取到了。
mapData.get('123456')
// { name: '第一个', id: '123456' }
新手上路,请多包涵

Element.map(item=>item.child).flat().find(item=>item.id==='123456')

首先,你确定你这是二维数组?

其次,这种数据应该是后台返回的。那么肯定具有一定规则,按规则取就行了,不需要自己瞎找。

非要瞎找,递归查找。数组找元素,对象hasOwnProperty('id')拿id,非引用类型跳过。

递归吧

childJin(data) {
    const a = data.children.length
    for (let i = 0; i < a; i++) {
        if(id === data.children[i].id) {
            return false
        } else {
            this.childJin(data.children[i])
        }
    }
},
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏