我有一个对象数组,其中每个对象都有一个对象的内部数组,它又有一个对象的内部数组,它可以到达我想要过滤和显示的内部对象的任何级别。
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 03:02:33
您可以在之前对移交的数组或对象进行检查的情况下使用Array#flatMap
,就像后面的subGroups
一样。
const
find = (array, name) => (Array.isArray(array) ? array : [array])
.flatMap(o => o.name === name ? o : find(o.subGroups, name)),
data = [{ 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: [] }] }],
result = find(data, 'orange-d');
console.log(result);
发布于 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
复制相似问题