亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據最大值和日期將對象推送到新數組?在 JavaScript 中

根據最大值和日期將對象推送到新數組?在 JavaScript 中

慕婉清6462132 2021-12-23 14:17:07
我有一個包含公斤數和一些日期的對象。我想要做的是將具有唯一日期的行推送到新數組。如果有包含相同日期的行,則只應將千克最高的行推送到新數組。如果有兩個相同公斤的日期,則只能選擇一個。這是它的樣子:[{"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。
查看完整描述

2 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

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


查看完整回答
反對 回復 2021-12-23
?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

我認為您的問題的很大一部分是日期格式。嘗試 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, date: new Date('10/14/2019') },

    { "kg": 5, date: new Date('10/15/2019') },

    { "kg": 15, 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);

}


查看完整回答
反對 回復 2021-12-23
  • 2 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號