我在使用哈希值来正确保存我正在寻找的值时遇到了一些麻烦。
这里有一些背景来澄清这些值。
我正在React中创建一个锻炼应用程序。最后一个功能是创建一个搜索功能,以返回用户的最大升力。
测试用于卧推。值如下。
405 435 285 225 135 185
无论我如何构造哈希,它返回{Bench Press:185},我希望它对数据进行排序,只有在新值大于旧值时才更改值。
const completedExercises = {};
mergedSets.forEach(set => {
if (set) {
let exercise = exercises[set.exercise_id]
let name = exercise.exercise_name
if (exercise.ex_type === 'lift') {
if (completedExercises[name] < (set.weight_lifted)) {
completedExercises[name] = set.weight_lifted
} else {
completedExercises[name] = set.weight_lifted
}
}
}
})
第一个条件是检查是否设置是否用户没有在其日志中存储锻炼。
第二种是仅使用升降式运动,因为有氧运动不具有举重值。
我可以在我的调试器中看到这两个条件正常工作并且所有数据都通过。
我有一个练习哈希,一个集合有一个exercise_id,这是我得到这个名字的地方。该套装存放了举重。
我对JS很新,所以我不确定这是否与使用forEach有关,同时我将尝试for循环。任何帮助,将不胜感激。无论顺序如何,这总是将哈希值设置为等于过去的最后一个值。
答案 0 :(得分:0)
for循环或forEach并不重要,这是我的其他条件,如评论中指出的那样!感谢您的帮助,深夜,以及漫长的一天......
const completedExercises = {};
for (var i = 0; i < mergedSets.length; i++) {
let set = mergedSets[i];
let exercise = exercises[set.exercise_id]
let name = exercise.exercise_name
if (exercise.ex_type === 'lift') {
if (completedExercises[name] < (set.weight_lifted)) {
completedExercises[name] = set.weight_lifted
} else if (!completedExercises[name]) {
completedExercises[name] = set.weight_lifted
}
}
}