本文介绍如何在多层嵌套结构(对象数组 → value 属性为对象数组)中,根据子对象的 `name` 字段模糊匹配指定字符串(如 `'ab'`),并精准返回符合条件的顶层对象及其精简后的 `value` 子数组。
在实际开发中,我们常遇到类似如下结构的数据:一个顶层数组,每个元素是一个包含 key 和 value 属性的对象,而 value 又是一个对象数组(每个子对象含 Id 和 Name 字段)。当需要按 Name 模糊搜索(例如查找包含 'AB' 的项)时,目标不是简单地扁平化所有数据,而是保留原始层级关系——仅筛选出至少有一个 Name 匹配的顶层对象,并将其 value 数组压缩为仅含匹配项的子集。
实现这一需求的核心思路是:
以下是完整可运行示例:
const data = [
{ "key": "001", "value": [{ "Id": "2345", "Name": "Test" }] },
{ "key": "112", "value": [{ "Id": "1234", "Name": "UHV" }, { "Id": "3424", "Name": "ABC" }] },
{ "key": "222", "value": [{ "Id": "2312", "Name": "ABD" }, { "Id": "1321", "Name": "RFV" }, { "Id": "4567", "Name": "ERF" }] }
];
const searchTerm = 'AB';
const result = data.reduce((acc, { value, ...rest }) => {
const matchedItems = value.filter(item => item.Name.includes(searchTerm));
if (matchedItems.length > 0) {
acc.push({ ...rest, value: matchedItems });
}
return acc;
}, []);
console.log(result);
// 输出:
// 
[
// { "key": "112", "value": [{ "Id": "3424", "Name": "ABC" }] },
// { "key": "222", "value": [{ "Id": "2312", "Name": "ABD" }] }
// ]✅ 关键优势说明:
⚠️ 注意事项:
该方案简洁、健壮且语义清晰,是处理此类嵌套搜索任务的推荐实践。