贝利信息

如何在嵌套对象数组中高效搜索匹配字符串的元素

日期:2026-01-15 00:00 / 作者:碧海醫心

本文介绍如何在多层嵌套结构(对象数组 → 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" }] } // ]

关键优势说明

⚠️ 注意事项

该方案简洁、健壮且语义清晰,是处理此类嵌套搜索任务的推荐实践。