根据最大值和日期将对象推送到新数组?在javascript

我有一个包含公斤数和一些日期的对象。我想做的是将具有唯一日期的行推送到新数组。如果存在包含相同日期的行,则仅应将公斤数最高的行推送到新数组中。如果有两个日期相同,则只能选择一个。

这里是什么样子:

[{"kg":10,"date":"14/10/2019"},{"kg":15,{"kg":5,"date":"15/10/2019"},{"kg":10,"date":"16/10/2019"}]

这是结果应该在新数组中的样子:

{"kg":15,"date":"16/10/2019"}]

现在我不知道如何检查公斤并获得最高的公斤。我知道我可以使用“ Math.max”获得最高的结果,但不能仅在相同的日期使用它。我一直在尝试一些foreach循环,但无法理解如何将日期分组并执行Math.max。我真的需要一些指导。

注意:语言是Java语言。

HUNDUNYISI 回答:根据最大值和日期将对象推送到新数组?在javascript

您可以使用Array#reduce减少整个数组。

const arr = [{"kg":10,"date": "14/10/2019"},{"kg":15,{"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);

,

我认为您的问题很大一部分是日期格式。请尝试10/14/2019而不是14/10/2019。

之后,您始终可以通过创建日期对象并在该对象上使用getDate()方法来获取要比较的值。

这是一个简单的示例,适用于单遍for循环。我首先对数据进行排序,以防万一您最终发现数据乱序,但是如果您确定日期始终按时间顺序排序,可以将其删除。我能够一次完成此操作的方法是,假设数组按日期从最旧的开始到最末的日期进行排序。

请务必记住,数组对象是引用类型。如果需要这些值,请确保制作足够深的副本。

compressArray();

function compressArray() {
    var orignialArray =
    [{ "kg": 12,date: new Date('10/17/2019') },{ "kg": 11,date: new Date('10/14/2019') },{ "kg": 15,{ "kg": 5,date: new Date('10/15/2019') },date: new Date('10/16/2019') }];
    //first sort data in case the data is out of order
    orignialArray = orignialArray.sort((a,b) => a.date.getDate() - b.date.getDate());
    console.log(orignialArray); //after sorting

    var compressedArray = new Array();
    compressedArray.push(orignialArray[0]); // seed array
    let j = 0; // this will be my index of the "compressed" array
    for (let i = 0; i < orignialArray.length; i++)
    {
        if (orignialArray[i].date.getDate() == compressedArray[j].date.getDate()) {
            compressedArray[j].kg = Math.max(orignialArray[i].kg,compressedArray[j].kg);
        }
        else
        { 
            j++; //move compressed array index
            compressedArray[j] = orignialArray[i];
        }
         console.log("i: " + i + "and j: " + j);
    }
    console.log(compressedArray);
}
本文链接:https://www.f2er.com/3127143.html

大家都在问