我有一个对象数组,在其中计算了特定IP的会话(花费的时间)。我以hh:mm:ss格式计算了花费的时间,以便于理解。
[ { start: 'Thu, 10 Jan 2019 06:04:49 GMT',
end: 'Thu, 10 Jan 2019 06:12:22 GMT',
total_spend: '00:07:27' },
{ start: 'Thu, 10 Jan 2019 07:58:18 GMT',
end: 'Thu, 10 Jan 2019 07:59:09 GMT',
total_spend: '00:00:50' },
{ start: 'Thu, 10 Jan 2019 09:28:00 GMT',
end: 'Thu, 10 Jan 2019 09:59:46 GMT',
total_spend: '00:31:46' } ]
现在我要从上面的数组中获得 total_spend最高的,即
与所有应为'00:31:46'的对象相比所花费的最长时间(31 分钟46秒)
我不知道如何进行比较,因为到目前为止,我所看到的所有这种格式的比较都已转换为日期,然后进行了比较。我可以将其转换为ms,然后进行比较。还有其他方法可以执行此操作吗?
答案 0 :(得分:1)
您可以不只是比较字符串吗?如果您执行'stringA'<'stringB',JavaScript会根据unicode值比较两个字符串,就好像它们将按字母顺序排序一样,因此较短的时间将被正确地评估为“小于”较长的时间。>
像这样:
const sessions = [
{ start: 'Thu, 10 Jan 2019 06:04:49 GMT',
end: 'Thu, 10 Jan 2019 06:12:22 GMT',
total_spend: '00:07:27' },
{ start: 'Thu, 10 Jan 2019 07:58:18 GMT',
end: 'Thu, 10 Jan 2019 07:59:09 GMT',
total_spend: '00:00:50' },
{ start: 'Thu, 10 Jan 2019 09:28:00 GMT',
end: 'Thu, 10 Jan 2019 09:59:46 GMT',
total_spend: '00:31:46' }
]
let highest = '00:00:00';
for (let session of sessions) {
if (session.total_spend > highest) {
highest = session.total_spend
}
}
console.log(highest)
答案 1 :(得分:0)
通过使用sort
和start
属性的不同,您可以end
降级 sessions 数组,然后仅访问第一个元素。
let sessions = [ { start: 'Thu, 10 Jan 2019 06:04:49 GMT', end: 'Thu, 10 Jan 2019 06:12:22 GMT', total_spend: '00:07:27' }, { start: 'Thu, 10 Jan 2019 07:58:18 GMT', end: 'Thu, 10 Jan 2019 07:59:09 GMT', total_spend: '00:00:50' }, { start: 'Thu, 10 Jan 2019 09:28:00 GMT', end: 'Thu, 10 Jan 2019 09:59:46 GMT', total_spend: '00:31:46' } ]
sessions.sort((a,b) => (new Date(b.end) - new Date(b.start)) - (new Date(a.end) - new Date(a.start)));
console.log(sessions[0].total_spend);
另一种方法可能是使用reduce
方法。
let sessions = [ { start: 'Thu, 10 Jan 2019 06:04:49 GMT', end: 'Thu, 10 Jan 2019 06:12:22 GMT', total_spend: '00:07:27' }, { start: 'Thu, 10 Jan 2019 07:58:18 GMT', end: 'Thu, 10 Jan 2019 07:59:09 GMT', total_spend: '00:00:50' }, { start: 'Thu, 10 Jan 2019 09:28:00 GMT', end: 'Thu, 10 Jan 2019 09:59:46 GMT', total_spend: '00:31:46' } ]
let index = sessions.reduce((iMax, x, i, arr) => (new Date(x.end) - new Date(x.start)) > new Date(arr[iMax].end) - new Date(arr[iMax].start) ? i : iMax, 0);
console.log(sessions[index].total_spend);