为什么在下面的node js程序中S函数内的第一个for循环无限运行?

梅塔

请检查以下代码,并解释为什么当我多次在输入中提供相同的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;

        }


    }

您可以通过在输入中提供不同的电话号码对其进行测试,然后使其完美运行。

gurvinder372

您的内部循环会在外部循环的每次迭代中重置ito的值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
     }
 }

或者只是使用filtermap

numberPresent = numberData.filter( s => s.number == number ).map( s => {
   s.duration += totalDuration;
   s.cost += cost;
   return s;
}).length > 0 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我在下面的函数中得到unboundLocalError?

在下面的代码中,为什么会提示“OUCH”?

为什么嵌套的“ for”循环在下面的程序中不起作用?

get_rect() 在下面的程序中做了什么?为什么使用它?

为什么这个while循环没有在下面的代码中结束?

为什么在下面的代码中两次调用了复制构造函数?

为什么在下面的函数中递增数组“ a”不是错误?

为什么onclick函数在下面的Javascript代码段中不起作用?

为什么scanf()函数没有等我在下面的代码中最后输入char

为什么在下面的代码中MRO在python中是反向的?

为什么 $scope 在下面的代码中没有定义在这里

在下面的示例中,为什么int(a)是表达式,而int(unsigned(a))是type-id?

为什么在下面的代码中printf()打印0而不是10?

为什么在下面的Go代码中不能使用空白标识符?

为什么在下面的示例中我无法清除interval?

为什么在下面的编程中该结构显示的内存少于实际的内存

为什么链接器在下面的代码中没有发出错误?

为什么 Kotlin 的 generateSequence 在下面的示例中返回了太多项?

在下面的ES6类中,goFast()为什么起作用?

为什么.append()在下面的代码中替换tbody的内容?

为什么Dart无法在下面的代码中找出类实例变量

为什么在下面的代码中“ someVariable”变量的值没有变化

为什么在下面的示例中不能使用结构的常量属性

为什么布尔在下面的代码中不采用true或false

为什么全局声明 row 和 col 在下面的代码中不起作用

为什么切换活动在下面的代码中不起作用?

为什么在下面的代码中数组的索引是一个字符串?

为什么在下面的代码中数组的索引是一个字符串?

什么是 !!在下面的宏中做什么?