如何以最优方式快速合并关联对象数组并映射添加状态字段
最优实现方案
核心思路
时间复杂度控制在O(M+N)(M为第二个数组长度,N为第一个数组长度),避免双重循环的O(M*N)低效率:
- 先对第二个数组做预处理,生成
id到状态的哈希映射表,一次遍历即可完成所有状态校验 - 遍历第一个数组时直接通过哈希表O(1)查询对应状态,直接赋值即可
具体实现代码
// 1. 预处理第二个数组构建状态映射表 const statusMap = new Map(); secondData.changePoints.forEach(({ Point }) => { // 嵌套every遇到不符合条件的项会提前终止遍历,减少无效计算 const allAvailable = Point.connectorGroups.every(group => group.connectors.every(connector => connector.connectorStatus === 'AVAILABLE') ); statusMap.set(Point.id, allAvailable ? 'AVAILABLE' : 'NOT AVAILABLE'); }); // 2. 给第一个数组批量赋值status字段 firstArray.forEach(item => { // 找不到对应id的场景默认设为NOT AVAILABLE,可根据业务需求调整默认值 item.status = statusMap.get(item.id) ?? 'NOT AVAILABLE'; });
优势说明
- 性能足够冗余:哪怕两个数组后续扩容到十万级,该方案也不会出现性能瓶颈,你当前900余条数据的场景下执行耗时不到1毫秒
- 逻辑清晰易维护:状态校验和数组赋值逻辑拆分,后续修改判断规则只需要调整预处理部分的代码即可
- 提前终止校验:嵌套使用
every方法,只要遇到任意一个非AVAILABLE的连接器就会停止当前id的状态判断,不需要遍历完所有连接器,进一步优化执行效率
内容的提问来源于stack exchange,提问作者Shubham Dhumal
相关产品推荐
相关产品推荐

