我有一个看起来像这样的对象:
peaks =
0: {intervalId: 7, time: 1520290800000, value: 54.95125000000001}
1: {intervalId: 7, time: 1520377200000, value: 49.01083333333333}
以此类推。
如何找到具有peak
值的Max
?
我试图这样做
this.loadPeak = peaks.map(a => Math.max(a.value));
但是我只是得到了一堆带有value
的峰数组(而不是所有的intervalId,时间,值),而不是最大值。
**非常感谢大家,每个解决方案都在奏效,可惜不能接受所有解决方案。 **
答案 0 :(得分:1)
简单的方法就是使用循环:
this.loadPeak = null;
for (const peak of peaks) {
if (!this.loadPeak || peak.value > this.loadPeak.value) {
this.loadPeak = peak;
}
}
实时示例:
const peaks = [
{intervalId: 7, time: 1520290800000, value: 54.95125000000001},
{intervalId: 7, time: 1520377200000, value: 49.01083333333333}
];
let loadPeak = null;
for (const peak of peaks) {
if (!loadPeak || peak.value > loadPeak.value) {
loadPeak = peak;
}
}
console.log(loadPeak);
与几乎所有数组操作一样,如果愿意,您可以将其插入reduce
调用中>
this.loadPeak = peaks.reduce((maxPeak, peak) => !maxPeak || maxPeak.value < peak.value ? peak : maxPeak, null);
const peaks = [
{intervalId: 7, time: 1520290800000, value: 54.95125000000001},
{intervalId: 7, time: 1520377200000, value: 49.01083333333333}
];
const loadPeak = peaks.reduce((maxPeak, peak) => !maxPeak || maxPeak.value < peak.value ? peak : maxPeak, null);
console.log(loadPeak);
我应该早些时候意识到这是一个重复的问题。我找到了重复目标,将其标记为CW答案。
答案 1 :(得分:1)
您只能传播Math.max
的value
值。
var peaks = [{ intervalId: 7, time: 1520290800000, value: 54.95125000000001 }, { intervalId: 7, time: 1520377200000, value: 49.01083333333333 }]
max = Math.max(...peaks.map(({ value }) => value)),
object = peaks.find(({ value }) => value === max);
console.log(max);
console.log(object);
答案 2 :(得分:1)
您可以按值的降序对peaks
进行排序,然后选择排序后的数组中的第一个。
let peaks = [{
intervalId: 7,
time: 1520290800000,
value: 54.95125000000001
},
{
intervalId: 7,
time: 1520377200000,
value: 49.01083333333333
}
]
let sortedPeaks = peaks.sort((a, b) => b.value - a.value)
let loadPeak = sortedPeaks[0];
console.log(loadPeak);
答案 3 :(得分:1)
对数组进行排序的主要问题是,它会导致整个数组进行许多不必要的迭代。数组越大,速度就越慢,进行排序以尝试上下移动元素。使用reduce()
,我们可以以最少的步骤来处理此问题,如果当前元素的值大于先前的值,则只需替换先前的值即可:
var peaks = [
{intervalId: 7, time: 1520290800000, value: 54.95125000000001},
{intervalId: 7, time: 1520377200000, value: 49.01083333333333}
];
const maxPeak = peaks.reduce((p, c) => p.value > c.value ? p : c);
console.log(maxPeak);