在做Perfeye需求的时候,有写了一个函数,每次遍历,要根据相同的时间,把对应的数据整合
刚开始用findIndex 进行每次查找,但是性能很差,后面问了gpt有没有什么操作能不用findIndex,gpt说可以单独存储时间索引值来进行判断
旧代码
const getFTimeDataSetSourceData = () => {
const result: { [x: string]: number; }[] = []
//Todo 等待优化
// 遍历 caseInfoList 中的每个 case
for (const caseInfo of caseInfoList) {
const caseData = caseInfo.dataList;
const dimensionName = caseInfo.dimensionName;
caseData.forEach(item => {
const len = item.FTime?.length || 0;
const splitTime = 1000 / len;
item.FTime?.forEach((t, idx) => {
const _time = item.time + round(idx * splitTime)
const _timeIndex = result.findIndex(item => item.time === _time)
if (_timeIndex === -1) {
result.push({
time: _time,
[dimensionName]: t
})
} else {
result[_timeIndex][dimensionName] = t
}
})
});
}
return result
}
新代码
const getFTimeDataSetSourceData = useMemoizedFn(() => {
const result: { [x: string]: number; }[] = []
const timeIndexMap: { [x: number]: number; } = {}; // 存储时间索引的对象
for (const caseInfo of caseInfoList) {
const caseData = caseInfo.dataList;
const dimensionName = caseInfo.dimensionName;
caseData.forEach(item => {
const len = item.FTime?.length || 0;
const splitTime = 1000 / len;
item.FTime?.forEach((t, idx) => {
const _time = item.time + round(idx * splitTime)
if (timeIndexMap[_time] === undefined) {
// 时间索引不存在,将其添加到结果数组中,并更新时间索引对象
result.push({
time: _time,
[dimensionName]: t
});
timeIndexMap[_time] = result.length - 1;
} else {
// 时间索引已存在,直接更新结果数组中对应的值
result[timeIndexMap[_time]][dimensionName] = t;
}
})
});
}
return result
})
今日问gpt,又学到了一招
标签:const,迭代,caseInfo,代码,dimensionName,item,查找,result,time From: https://www.cnblogs.com/qisexin/p/optimize-the-code-to-iterate-every-time-you-look-for-dgf