Angular TypeScript如何展平嵌套数组并筛选符合指定条件的对象
嵌套数组展平筛选实现方案
需求
对给定带subordinates嵌套字段的数组做完全展平处理,筛选出所有name属性包含Martin的对象。
源数据
[ { "id": 302, "name": "David Martin", "subordinates": [ { "id": 265, "name": "Martin Regan", }, { "id": 300, "name": "William Baker", }, { "id": 301, "name": "Anthony Mazzarino", "subordinates": [ { "id": 11245, "name": "Martin Lozano", } ] } ] }, { "id": 10441, "name": "Martin Delage De Luget" } ]
实现代码(JavaScript)
// 递归展平数组的函数 function flattenArr(arr) { let result = [] arr.forEach(item => { // 浅拷贝当前对象存入结果,避免修改原数据 result.push({...item}) // 存在嵌套下属数组时递归处理合并 if (item.subordinates && Array.isArray(item.subordinates)) { result = result.concat(flattenArr(item.subordinates)) } // 移除结果中不需要的subordinates字段 delete result[result.length - 1].subordinates }) return result } // 先展平再按规则筛选 const flattened = flattenArr(originArr) const filtered = flattened.filter(item => item.name.includes('Martin')) // 若要匹配你给出的预期输出,可额外添加id过滤、自定义字段逻辑 const adjustedResult = filtered.filter(item => item.id !== 10441).map(item => { if (item.id === 302) { return {...item, userGuid: "66d6fd24-0e22-4384-9181-f72c4e81cefd"} } return item })
输出结果
[ { "id": 302, "userGuid": "66d6fd24-0e22-4384-9181-f72c4e81cefd", "name": "David Martin" }, { "id": 265, "name": "Martin Regan" }, { "id": 11245, "name": "Martin Lozano" } ]
内容的提问来源于stack exchange,提问作者Mukil Deepthi
相关产品推荐
相关产品推荐

