JS嵌套对象数组按子元素值过滤,返回父对象及匹配子项
你原有的实现仅通过序列化字符串判断父对象是否包含匹配值,没有对匹配到的父对象的子数组做裁剪,因此会返回父对象下的全部子项。可以按如下方式修改代码:
function filterByValue(array, keyword) { // 统一转小写实现大小写不敏感匹配 const target = keyword.toLowerCase() return array .map(parentObj => { // 取出父对象对应的Dashboard格式键 const [dashboardKey] = Object.keys(parentObj) // 过滤子数组仅保留name匹配的项 const matchedChildren = parentObj[dashboardKey].filter( item => item.name?.toLowerCase() === target ) // 无匹配项返回null后续统一过滤 return matchedChildren.length ? { [dashboardKey]: matchedChildren } : null }) // 移除无匹配项的父对象 .filter(Boolean) }
调用filterByValue(原数组, 'Summary')即可得到你需要的结果,你给出的期望结果第三项属于笔误,按原结构输出为Dashboard3而非重复的Dashboard2,上述代码会正确处理该逻辑。
内容的提问来源于stack exchange,提问作者phcm
相关产品推荐
相关产品推荐

