gpt4 book ai didi

javascript - 在重复嵌套的数组中查找对象和父对象

转载 作者:行者123 更新时间:2023-11-30 14:30:37 25 4
gpt4 key购买 nike

如何在大小未知的重复嵌套数组中查找对象和父对象?使用 lodash 或原生 javascript。

数组可能是这样的:

var modules = [{
name: 'Module1',
submodules: [{
name: 'Submodule1',
id: 1,
submodules: [{
name: 'Submodule11',
id: 1,
submodules: []
}, {
name: 'Submodule12',
id: 2,
submodules: [{
name: 'Submodule121',
id: 1,
submodules: []
}, {
name: 'Submodule122',
id: 2,
submodules: []
}]
}]
},
{
name: 'Submodule2',
id: 2,
submodules: []
}
]
},
{
name: 'Module2',
submodules: [{
name: 'Submodule1',
id: 3,
submodules: []
}, {
name: 'Submodule2',
id: 4,
submodules: []
}]
}
];

假设数组中的所有“名称”属性都是唯一的

我想找到:

名称:'Submodule122'

我使用这个函数来查找父对象,但它只适用于数组的第一层:

_.find(this.modules , function(item) {
return _.some(item.submodules, { name: 'Submodule122'});

这是为了找到实际的对象,但它也只适用于数组的第一层:

_(this.modules)
.thru(function (coll) {
return _.union(coll, _.map(coll, 'submodules'));
})
.flatten()
.find({ name: 'Submodule122'})

最佳答案

您可以通过将实际对象作为父对象来采用迭代和递归方法。

function find(name, array, parent) {
var result;
array.some(object =>
object.name === name && (result = { object, parent }) ||
(result = find(name, object.submodules, object))
);
return result;
}

var modules = [{ name: 'Module1', submodules: [{ name: 'Submodule1', id: 1, submodules: [{ name: 'Submodule11', id: 1, submodules: [] }, { name: 'Submodule12', id: 2, submodules: [{ name: 'Submodule121', id: 1, submodules: [] }, { name: 'Submodule122', id: 2, submodules: [] }] }, { name: 'Submodule2', id: 2, submodules: [] }] }, { name: 'Module2', submodules: [{ name: 'Submodule1', id: 3, submodules: [] }, { name: 'Submodule2', id: 4, submodules: [] }] }] }];

console.log(find('Submodule122', modules));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在重复嵌套的数组中查找对象和父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51242207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com