请检查以下代码,并解释为什么当我多次在输入中提供相同的9位数电话号码时,for循环为什么无限运行。我正在更改嵌套的for循环中numberData的内容,但这不应该是一个问题,并且在numberData的嵌套的for循环后完成元素的推送,所以我很困惑为什么有人会解释它的发生:
var str = "00:01:07,400-234-090\n00:05:01,701-080-080\n00:05:00,400-234-090\n00:01:06,701-080-080\n00:01:06,701-080-000"
console.log(solution(str))
function solution(S) {
var totalCost = 0
var lineArray = S.split('\n')
var numberData = []
/*{
number = 0,
duration = 0,
cost = 0
}*/
console.log(lineArray)
for (var i = 0; i < lineArray.length; i++) {
console.log(lineArray.length, i);
var dataArray = lineArray[i].split(',')
var number = dataArray[1]
var duration = dataArray[0]
var timeArray = duration.split(':')
var hours = +(timeArray[0])
var min = +(timeArray[1])
var sec = +(timeArray[2])
var numberPresent = false
var totalDuration = hours * 60 * 60 + min * 60 + sec //in Seconds
var cost = 0;
if (min < 5) {
cost = min * 60 + sec
} else {
if (sec == 0)
cost = min * 150
else
cost = (min + 1) * 150
}
for (var i = 0; i < numberData.length; i++) {
if (numberData[i].number == number) {
numberData[i].duration += totalDuration
numberData[i].cost += cost
numberPresent = true
}
}
if (!numberPresent)
numberData.push({
number: number,
duration: totalDuration,
cost: cost
})
}
var maxDurationIndex = 0
totalCost += numberData[0].cost
for (var i = 1; i < numberData.length; i++) {
if (numberData[i].duration > numberData[maxDurationIndex])
maxDurationIndex = i;
if (numberData[i].duration == numberData[maxDurationIndex]) {
var currentNumericNumber = getNumericNumber(numberData[i])
var maxIndexNumber = getNumericNumber(numberData[maxDurationIndex])
if (currentNumericNumber > maxIndexNumber)
maxDurationIndex = i;
}
totalCost += numberData[i].cost
}
totalCost = totalCost - (+numberData[maxDurationIndex].cost)
return totalCost
function getNumericNumber(numberString) {
var numberArray = numberString.split('-')
var string = '';
for (var i = 0; i < numberArray.length; i++) {
string += numberArray[i];
}
return +string;
}
}
您可以通过在输入中提供不同的电话号码对其进行测试,然后使其完美运行。
您的内部循环会在外部循环的每次迭代中重置i
to的值numberData.length
。对内部循环使用不同的变量,numberData
例如j
for(var j=0; j<numberData.length; j++)
{
if(numberData[j].number == number)
{
numberData[j].duration+= totalDuration
numberData[j].cost +=cost
numberPresent = true
}
}
或者只是使用filter
和map
numberPresent = numberData.filter( s => s.number == number ).map( s => {
s.duration += totalDuration;
s.cost += cost;
return s;
}).length > 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句