我有一个对象数组,其中每个对象都有一个对象的内部数组,它又有一个对象的内部数组,它可以到达我想要过滤和显示的内部对象的任何级别。
obj = [{ name: "apple", subGroups: [{ name: "apple-a", subGroups: { name: "apple-b", subGroups: [{ name: "apple-c", subGroups: { name: "apple-d", subGroups:[]}}]}}]}
{ name: "orange", subGroups: [{ name: "orange-a", subGroups: { name: "orange-b", subGroups: [{ name: "orange-c", subGroups: { name: "orange-d", subGroups:[]}}]}}]}
{ name: "mango", subGroups: [{ name: "123", subGroups: []}]}
{ name: "grapes", subGroups: [{ name: "123", subGroups: []}]}
{ name: "pear", subGroups: [{ name: "123", subGroups: []}]}]
搜索值是动态的‘orange d’,
searchvalue = 'orange-d';
result = { name: "orange-d", subGroups:[]}
const newArr = obj.map(obj => {
return obj.name === searchvalue;
}).flat();
我已经尝试了过滤,地图,平面,但我不能找到输出,请帮助
发布于 2020-09-30 02:58:17
附注:如果您重新考虑一下递归结构,可能会更好。对于解决方案,您应该使用某种递归,如下所示:
var obj = [
{ name: "apple", subGroups: [
{ name: "apple-a", subGroups: [
{ name: "apple-b", subGroups: [
{ name: "apple-c", subGroups: [
{ name: "apple-d", subGroups:[]}
]}
]}
]}
]},
{ name: "orange", subGroups: [
{ name: "orange-a", subGroups: [
{ name: "orange-b", subGroups: [
{ name: "orange-c", subGroups: [
{ name: "orange-d", subGroups:[]}
]}
]}
]}
]},
{ name: "mango", subGroups: [
{ name: "123", subGroups: []}
]},
{ name: "grapes", subGroups: [
{ name: "123", subGroups: []}
]},
{ name: "pear", subGroups: [
{ name: "123", subGroups: []}
]}
];
var searchvalue = 'orange-d';
function findName(array, name) {
let result = {};
if(!(Array.isArray(array) && array.length))
return result;
for(let item of array) {
if(item.name === name) return item;
result = findName(item.subGroups, name);
if (result && result.name === name) return result;
}
return result;
}
console.log(findName(obj, searchvalue));
https://stackoverflow.com/questions/64125324
复制相似问题