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);

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);
}
添加回答
舉報