TypeScript如何用筛选后数组替换目标对象的values属性数组
TypeScript 实现方案
首先先定义对应的TS类型约束结构:
// 定义values数组单条数据的类型 interface ValueItem { count: number; id: string; name: string; } // 定义外层统计对象的类型 interface AccountStat { count: number; id: string; name: string; values: ValueItem[]; }
方案1:直接修改原对象
如果允许修改原始对象,直接对values属性赋值即可,注意同步更新外层count字段的取值(根据业务逻辑二选一即可):
// 原始对象 const originStat: AccountStat = { "count": 8, "id": "accountId", "name": " Account Id", "values": [ {"count": 2,"id": "1234456789000","name": "1234456789000"}, {"count": 1,"id": "135792468045","name": "135792468045"}, {"count": 1,"id": "309983110022","name": "309983110022"}, {"count": 2,"id": "432112426686","name": "432112426686"}, {"count": 1,"id": "6ee26149-a156-4665-bd26-a6e46b49a70f","name": "6ee26149-a156-4665-bd26-a6e46b49a70f"}, {"count": 1,"id": "927b48ce-efe4-4c20-98f0-ec6c54f59b45","name": "927b48ce-efe4-4c20-98f0-ec6c54f59b45"} ] }; // 筛选后的数组 const filteredValues: ValueItem[] = [ {"count": 2,"id": "432112426686","name": "432112426686"}, {"count": 2,"id": "1234456789000","name": "1234456789000"} ]; // 替换values属性 originStat.values = filteredValues; // 同步更新外层count:如果count代表values数组的长度 originStat.count = filteredValues.length; // 若外层count代表所有子项count的累加和,使用如下逻辑替换即可 // originStat.count = filteredValues.reduce((sum, item) => sum + item.count, 0);
方案2:不可变更新(不修改原对象)
如果用在React状态管理、函数式编程等不允许修改原始数据的场景,可通过解构赋值生成新对象:
const updatedStat: AccountStat = { ...originStat, values: filteredValues, // 按需更新count,同上二选一 count: filteredValues.reduce((sum, item) => sum + item.count, 0) };
内容的提问来源于stack exchange,提问作者Curious_k.shree
相关产品推荐
相关产品推荐

