Javascript 转换具有属性值的对象的更快方法是什么;HH:MM:SS“;串;N分钟;?
我有上百个结构像Javascript 转换具有属性值的对象的更快方法是什么;HH:MM:SS“;串;N分钟;?,javascript,Javascript,我有上百个结构像 { movieName: 'xyz', time: '02:15:50' timeAsText: null } 我需要根据属性“time”将文本设置为“136分钟”。 秒应该四舍五入 你能告诉我什么是更快的方法吗?试试这个 var obj = { movieName: 'xyz', time: '02:15:50' timeAsText: null } var a = obj.time.split(':');
{
movieName: 'xyz',
time: '02:15:50'
timeAsText: null
}
我需要根据属性“time”将文本设置为“136分钟”。
秒应该四舍五入
你能告诉我什么是更快的方法吗?试试这个
var obj = {
movieName: 'xyz',
time: '02:15:50'
timeAsText: null
}
var a = obj.time.split(':'); // split it at the colons
var minutes = parseInt(+a[0]) * 60 + parseInt(+a[1]) + Math.round(parseInt(+a[2])/60);
obj.timeAsText = minutes + " minutes";
最好的办法可能是这样,而且,从数量上看,类似的答案可能是唯一的一个 -首先,使用split(“:”)使字符串成为可解析字符串的数组 -然后,将值解析为int。使用parseInt 此时,您应该有一个这样的数组
[number_of_hours, number_of_minutes,number_of_second]
-然后只需添加不同的值,如
obj.timeAsText = array[0]*60+array[1]+Math.round(array[2]/60)+' minutes';
完整答案:
var arr=obj.time.split(':').forEach(function(entry){
entry=parseInt(entry);
});
obj.timeAsText= arr[0]*60+arr[1]+Math.round(array[2]/60)+" minutes";
我尝试了两种方法();第一次使用,第二次使用普通的
for…loop
。从演示中可以看出,普通循环速度要快得多:
var out = [];
for (var i = 0, l = arr.length; i < l; i++) {
var obj = arr[i];
var time = obj.time.split(':').map(Number);
if (time[2] > 0) { time[1]++; }
obj.timeAsText = (time[0] * 60) + time[1] + ' minutes';
out.push(obj);
}
var out=[];
对于(变量i=0,l=arr.length;i0){time[1]+;}
obj.timeAsText=(时间[0]*60)+时间[1]+'分钟';
向外推(obj);
}
我不知道它是否最快,但它是最容易阅读的:
var test = {
movieName: 'xyz',
time: '02:15:50',
timeAsText: null
};
test.time.replace(/^(\d{2}):(\d{2}):(\d{2})$/, function(m, p1, p2, p3) {
// Multiplication and division implicitly converts p1 and p3 to numbers
return p1*60 + parseInt(p2) + Math.ceil(p3/60);
});
您已经尝试了什么,以便我们知道不添加什么作为答案?还有,这些物体是如何固定的?它们是否在一个数组中?对象是否在服务器端生成?