使用Angular将现有数组对象转换为指定格式的新数组对象
你直接在Angular的组件/服务里写个转换方法就能实现,逻辑很简单:遍历原始数组的每一项,再分别处理in、low、medium三个统计字段,按字段对应的数值生成对应数量的条目,遇到medium值为0的情况直接跳过就行。
代码实现示例
如果用TypeScript的话可以先定义类型,也可以省略直接写逻辑:
// 原始数据类型(可选) interface RawItem { testTargetname: string; in: number; low: number; medium: number; } // 转换后数据类型(可选) interface TargetItem { testTargetname: string; [key: string]: string | number; }
然后写转换方法,你可以放在需要用到的组件类里,或者封装成公共服务方法复用:
transformData(rawList: RawItem[]): TargetItem[] { const result: TargetItem[] = []; // 要处理的统计字段列表 const statFields = ['in', 'low', 'medium']; rawList.forEach(rawItem => { statFields.forEach(field => { const count = rawItem[field as keyof RawItem]; // 符合规则:medium为0时不生成条目 if (field === 'medium' && count === 0) return; // 按计数生成对应数量的条目 for (let i = 0; i < count; i++) { result.push({ testTargetname: rawItem.testTargetname, [field]: 1 }); } }); }); return result; }
调用方式
直接把你的原始数组传入方法就能拿到目标结果:
// 你的原始数据 const originArr = [ { testTargetname: "Test system", in: 2, low: 1, medium: 2 }, { testTargetname: "Test app", in: 2, low: 1, medium: 0 } ]; // 调用转换方法 const finalArr = this.transformData(originArr); // 输出的finalArr就是你需要的格式 console.log(finalArr);
注:你给出的示例目标数组里Test system对应了3条medium条目,应该是笔误,按你给的原始数据medium值为2,代码会生成2条对应条目,如果你需要调整计数规则,直接修改判断逻辑即可。
内容的提问来源于stack exchange,提问作者Dr. Rill
相关产品推荐
相关产品推荐

