测试数据
let list = [{
name: '45',
id: 455,
children: [
{
name: '451',
id: 4551,
children: {
name: '4511',
id: 455111,
children: []
}
}
]
}, {
name: '46',
id: 466,
children: [
{
name: '461',
id: 4661,
children: {
name: '4611',
id: 466111,
children: []
}
}
]
}, {
name: '47',
id: 477,
children: [
{
name: '471',
id: 4771,
children: {
name: '4711',
id: 477111,
children: []
}
}
]
}, {
name: '48',
id: 488,
children: [
{
name: '481',
id: 4881,
children: {
name: '4811',
id: 488111,
children: []
}
}
]
}, {
name: '49',
id: 499,
children: [
{
name: '491',
id: 4991,
children: {
name: '4911',
id: 499111,
children: []
}
}
]
}]
封装方法
function findingMultidimensionalArrays(arrList, value) {
if (Array.isArray(arrList)) {
let arr = []
arrList.forEach((item) => {
if (typeof item === 'object') {
if (Array.isArray(item)) {
const list = findingMultidimensionalArrays(item, value)
list.length > 0 && arr.push(...list)
} else {
const obj = isObjectArray(item, value)
if (obj) {
if (Array.isArray(obj)) {
arr.push(...obj)
} else {
arr.push(obj)
}
}
}
} else {
if (item === value) {
arr.push(item)
}
}
})
return arr
}
}
function isObjectArray(item, value) {
if (item) {
const keys = Object.keys(item)
let res = null
keys.forEach((val) => {
if (typeof item[val] === 'object') {
if (Array.isArray(item[val])) {
if (item[val].length > 0) {
const list = findingMultidimensionalArrays(item[val], value)
list && (res = list)
}
} else if (typeof item[val] === 'object') {
res = isObjectArray(item[val], value)
}
} else {
item[val] === value && (res = item)
}
})
return res
}
}
调用方法
const arr = findingMultidimensionalArrays(list, "4811")