javascript - 根据最高值和日期将对象推送到新数组?在 JavaScript 中
问题描述
我有一个包含公斤数和一些日期的对象。我想要做的是将具有唯一日期的行推送到一个新数组。如果存在包含相同日期的行,则仅应将千克数最高的行推送到新数组中。如果有两个相同公斤的日期,应该只选择一个。
下面是它的样子:
[{"kg":10,"date":"14/10/2019"},
{"kg":15,"date":"14/10/2019"},
{"kg":15,"date":"14/10/2019"},
{"kg":5,"date":"15/10/2019"},
{"kg":10,"date":"16/10/2019"}]
以下是结果在新数组中的样子:
{"kg":15,"date":"14/10/2019"},
{"kg":5,"date":"15/10/2019"},
{"kg":10,"date":"16/10/2019"}]
现在我不知道如何检查公斤并获得最高的。我知道我可以使用“Math.max”来获得最高值,但不能只在相同的日期使用它。我一直在尝试一些 foreach 循环,但我无法理解如何对日期进行分组并执行 Math.max。我真的需要一些指导。
注意:语言是Javascript。
解决方案
您可以使用 Array#reduce 减少整个数组。
const arr = [{"kg":10, "date": "14/10/2019"},
{"kg":15, "date": "14/10/2019"},
{"kg":15, "date": "14/10/2019"},
{"kg":5, "date": "15/10/2019"},
{"kg":10, "date": "16/10/2019"}];
const o = Object.values(arr.reduce((s, a) => {
if (s[a.date]) { // check if that date already exist in the result obj
if (s[a.date].kg < a.kg) {
s[a.date] = a; // assign a new value only if has higher "kg" than current
}
} else {
s[a.date] = a; // if doesnt exist yet, assign it anyways to our obj
}
return s;
}, {}));
console.log(o);
推荐阅读
- javascript - 如何使用 Javascript 或 ExtJs 删除 HTML 块中没有属性的 span 标签
- php - 在 PHP 中通过 foreach 和 mysql 创建分组行
- javascript - 我已经安装了 opusscript / @discordjs/opus 似乎找不到 Opus 引擎
- regex - 正则表达式匹配行,其中第一个单词在该行的其他地方重复
- c# - 如何让visual studio高亮关键词
- cuda - ptxas 抱怨(输入)我悲伤的设备功能
- python - 叶图返回“TypeError:int64 类型的对象不是 JSON 可序列化的”
- android - 在 Android Studio 中打开对话框时,如何让我的活动保持运行?
- ruby-on-rails - 为什么 User.count 返回 0,直到 bin/spring 在 Ruby on Rails 中重新启动?
- laravel - 在 laravel 中设置的变量没有值