首页 > 解决方案 > 根据最高值和日期将对象推送到新数组?在 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。

标签: javascriptarraysloops

解决方案


您可以使用 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);


推荐阅读