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