如何基于现有filteredData逻辑合并嵌套对象所有子项的details数组
实现方案
1. 修改filteredData生成逻辑,新增全量数据条目
生成filteredData时额外新增一条对应空筛选条件的记录,值为所有details合并后的结果,原有按名称存储的逻辑保留,不会影响原有正常筛选的逻辑:
filteredData = {}; // 合并所有用户的details数组,运行环境不支持flatMap可以用下方注释的reduce写法替换 const allDetails = Object.values(data).flatMap(item => item.details); // 兼容写法:const allDetails = Object.values(data).reduce((res, curr) => res.concat(curr.details), []) // 这里假设空筛选条件传入的值是空字符串,如果你实际的空值是null/undefined,对应修改key即可 filteredData[''] = { details: allDetails }; // 原有逻辑不变 Object.keys(data).forEach((name) => { filteredData[name] = data[name]; });
2. 原有调用逻辑无需调整
构造函数内的取值代码完全不用修改,也不需要传入原始data。当vis.name为空筛选条件时,自动会取到合并后的全量details数组,单名称筛选的逻辑也和之前保持一致:
vis.dataFilteredTemp = filteredData[vis.name]; vis.dataFiltered = vis.dataFilteredTemp["details"];
内容的提问来源于stack exchange,提问作者moys
相关产品推荐
相关产品推荐

