gpt4 book ai didi

javascript - 无法计算总时数

转载 作者:行者123 更新时间:2023-11-30 11:46:26 25 4
gpt4 key购买 nike

我是 JavaScript 新手。我们有一个代码可以根据“员工 ID”添加总小时数。下面的代码显示了“excessTime”的正确结果。但对于“totalHours”,它显示“NaN”。有谁知道为什么它在添加“totalHours”时显示“NaN”以及如何解决它?

<!DOCTYPE html>
<html>
<body>
<script>
var input = [
{
"employeeId": "101",
"totalHours": "1:46",
"excessTime": "2:15"
},
{
"employeeId": "102",
"totalHours": "1:15",
"excessTime": "1:30"
},
{
"employeeId": "101",
"totalHours": "1:15",
"excessTime": "3:00"
},
{
"employeeId": "102",
"totalHours": "1:00",
"excessTime": "2:15"
}
]

var obj = input.reduce( function(init, e){
if (init[e["employeeId"]] == undefined){
init[e["employeeId"]] = {hours: parseInt(e["totalHours"].split(":")[0]),minutes: parseInt(e["totalHours"].split(":")[1])};
init[e["employeeId"]].timeString = e["totalHours"];
init[e["employeeId"]] = {hrs: parseInt(e["excessTime"].split(":")[0]),mns: parseInt(e["excessTime"].split(":")[1])};
init[e["employeeId"]].excessString = e["excessTime"];
return init;
} else {
init[e["employeeId"]].hours += (parseInt(e["totalHours"].split(":")[0]) + Math.floor((init[e["employeeId"]].minutes + parseInt(e["totalHours"].split(":")[1]))/60));
init[e["employeeId"]].minutes = (init[e["employeeId"]].minutes + parseInt(e["totalHours"].split(":")[1]))%60;
init[e["employeeId"]].timeString = init[e["employeeId"]].minutes > 9 ? init[e["employeeId"]].hours + ":" + init[e["employeeId"]].minutes : init[e["employeeId"]].hours + ":0" + init[e["employeeId"]].minutes;

init[e["employeeId"]].hrs += (parseInt(e["excessTime"].split(":")[0]) + Math.floor((init[e["employeeId"]].mns + parseInt(e["excessTime"].split(":")[1]))/60));
init[e["employeeId"]].mns = (init[e["employeeId"]].mns + parseInt(e["excessTime"].split(":")[1]))%60;
init[e["employeeId"]].excessString = init[e["employeeId"]].mns > 9 ? init[e["employeeId"]].hrs + ":" + init[e["employeeId"]].mns : init[e["employeeId"]].hrs + ":0" + init[e["employeeId"]].mns;
return init;
}
}, {});

var arr = [];
for (var prop in obj) arr.push({employeeId: prop, totalHours: obj[prop].timeString, excessTime: obj[prop].excessString});
console.log(arr);
</script>
</body>
</html>

输出:

[
{
"employeeId": "101",
"totalHours": "NaN:0NaN",
"excessTime": "5:15"
},
{
"employeeId": "102",
"totalHours": "NaN:0NaN",
"excessTime": "3:45"
}
]

最佳答案

您正在尝试为 hoursminutes 属性赋值,但它们是 undefined。您需要在第一个 if 语句中分别将它们分配给小时和分钟:

init[e["employeeId"]].hours = parseInt(e["totalHours"].split(":")[0]);
init[e["employeeId"]].minutes = parseInt(e["totalHours"].split(":")[1]);

全部看起来像这样:

var input = [
{
"employeeId": "101",
"totalHours": "1:46",
"excessTime": "2:15"
},
{
"employeeId": "102",
"totalHours": "1:15",
"excessTime": "1:30"
},
{
"employeeId": "101",
"totalHours": "1:15",
"excessTime": "3:00"
},
{
"employeeId": "102",
"totalHours": "1:00",
"excessTime": "2:15"
}
]

var obj = input.reduce( function(init, e){
if (init[e["employeeId"]] == undefined){
init[e["employeeId"]] = {hours: parseInt(e["totalHours"].split(":")[0]),minutes: parseInt(e["totalHours"].split(":")[1])};
init[e["employeeId"]].timeString = e["totalHours"];
init[e["employeeId"]] = {hrs: parseInt(e["excessTime"].split(":")[0]),mns: parseInt(e["excessTime"].split(":")[1])};
init[e["employeeId"]].excessString = e["excessTime"];
init[e["employeeId"]].hours = parseInt(e["totalHours"].split(":")[0]);
init[e["employeeId"]].minutes = parseInt(e["totalHours"].split(":")[1]);
return init;
} else {
init[e["employeeId"]].hours += (parseInt(e["totalHours"].split(":")[0]) + Math.floor((init[e["employeeId"]].minutes + parseInt(e["totalHours"].split(":")[1]))/60));
init[e["employeeId"]].minutes = (init[e["employeeId"]].minutes + parseInt(e["totalHours"].split(":")[1]))%60;
init[e["employeeId"]].timeString = init[e["employeeId"]].minutes > 9 ? init[e["employeeId"]].hours + ":" + init[e["employeeId"]].minutes : init[e["employeeId"]].hours + ":0" + init[e["employeeId"]].minutes;

init[e["employeeId"]].hrs += (parseInt(e["excessTime"].split(":")[0]) + Math.floor((init[e["employeeId"]].mns + parseInt(e["excessTime"].split(":")[1]))/60));
init[e["employeeId"]].mns = (init[e["employeeId"]].mns + parseInt(e["excessTime"].split(":")[1]))%60;
init[e["employeeId"]].excessString = init[e["employeeId"]].mns > 9 ? init[e["employeeId"]].hrs + ":" + init[e["employeeId"]].mns : init[e["employeeId"]].hrs + ":0" + init[e["employeeId"]].mns;
return init;
}
}, {});

var arr = [];
for (var prop in obj) arr.push({employeeId: prop, totalHours: obj[prop].timeString, excessTime: obj[prop].excessString});
console.log(arr);

结果:

  [{
"employeeId": "101",
"totalHours": "3:01",
"excessTime": "5:15"
}, {
"employeeId": "102",
"totalHours": "2:15",
"excessTime": "3:45"
}]

JSFiddle: https://jsfiddle.net/v7eckcny/

关于javascript - 无法计算总时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40858509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com