如何重组嵌套数组对象为Material UI DataGrid可适配的对象数组?
实现思路
- 第一步:匹配到与mainData对应的table配置项,拿到要生成的行标识列表
- 第二步:遍历行标识列表,逐行构造符合要求的对象,自动生成自增id
- 第三步:每个行对象内遍历所有mainData条目,注入对应属性值,适配动态长度的行标识列表
实现代码
function transformData(mainData, tableData) { // 1. 获取mainData对应的tableId,默认取第一个元素的tableId(同组mainData属于同一张表) const targetTableId = mainData[0]?.table_id; if (!targetTableId) return []; // 2. 匹配对应的table配置,拿到行标识数组 const matchedTable = tableData.find(item => item.id === targetTableId); if (!matchedTable || !Array.isArray(matchedTable.data)) return []; const rowIdentifiers = matchedTable.data; // 3. 遍历行标识构造输出数组 return rowIdentifiers.map((identifier, index) => { const row = { id: index + 1, rowIdentifier: identifier }; // 注入所有mainData对应的属性 mainData.forEach(col => { const value = col.data[identifier]; // 可选:将字符串布尔值转小写,匹配示例输出格式 row[col.id] = typeof value === 'string' && ['True', 'False'].includes(value) ? value.toLowerCase() : value; }); return row; }); } // 调用示例 const newArray = transformData(mainData, tableData);
适配说明
- 如果存在多组不同
table_id的mainData需要处理,可先对mainData按table_id分组,再分别调用上述函数合并结果即可 - 自动适配
tableData.data数组的长度变化,新增/删除行标识无需修改逻辑 - 自动兼容mainData元素的增减,新增列数据会自动注入到所有行对象中
内容的提问来源于stack exchange,提问作者Siert
相关产品推荐
相关产品推荐

