尝试使用for循环求和时出错

时间:2018-09-16 13:25:35

标签: javascript for-loop

每一次运行都在浪费时间!无限循环。 该错误可能是在我的第二个循环中,但是我已经尝试将其移到外面并且仍然给出错误。

找不到错误,有帮助吗?

谢谢

打印值还是有问题,有帮助吗?

我尝试获取所有值和总和,然后用新的变量打印总和。

college.Debug.setWebContentsDebuggingEnabled(true);


var workflow_value = [
    'Enter Value 1',
    'Enter Value 2',
    'Enter Value 3'
]

var questionsAndValues = {};

for (var i = 0; i < workflow_value.length; i++) {
    var fieldName = workflow_value[i];
    var fieldValue = college.getJobWorkflowValueByName(fieldName);
    if (fieldValue && fieldValue != '') {
        questionsAndValues[fieldName] = fieldValue;
    }
}

var values = [];
var sumOfValues = 0;


for (value in questionsAndValues){

    var current_value = parseFloat(questionsAndValues[value]);
    if (!isNaN(current_value)) {
        sumOfValues += current_value;
    } 
    else {
        console.log('invalid values');
    }
}

questionsAndValues['Total Value'] = sumOfValues;

var okShowText = function(){

};

var cancelShowText = function(){

};



$(document).ready( function() {

   college.Dialog.showProgressDialog('Loading Data...');

    for (var question in questionsAndValues){
        var rowToAppend =   '<div style="min-height:40px;border-bottom: solid 1px gray"><div style="min-width:38%; max-width:38%; display:inline-block; height:40px; border-right: solid 1px gray"><div style="padding:5%">' +  question + '</div></div>' + 
                            '<div style="min-width:60%; max-width:60%; display:inline-block; margin-left:5px"><div>' +  questionsAndValues[question] + '</div></div></div>'

        $('#detailsView').append(rowToAppend);
    }
    console.log(JSON.stringify(questionsAndValues)); 
    console.log(sumOfValues);
    college.Dialog.hideProgressDialog();

        // console.log (sumOfValues);
    var options = {
        "title":"Total of values is",
        "text": "The total value is " + sumOfValues,
        "ok_label":"Yes",
        "cancel_label":"Do Nothing"
    }

    college.Dialog.showText("okShowText","cancelShowText",options) 

});

1 个答案:

答案 0 :(得分:1)

vars的作用域范围是函数,因此所有var i都与完全相同的变量进行交互。因此,当一个内循环运行时,它将抛出外循环的计数。如果改用let,则它们将具有块作用域,并且不会互相践踏。

切换到后,您将仍然拥有一个使用相同变量名的外部循环和内部循环。您应为这些名称使用不同的名称,以免混淆何时访问哪个名称

for (let i = 0; i < workflow_value.length; i++) {
  const fieldName = workflow_value[i];
  const fieldValue = college.getJobWorkflowValueByName(fieldName);
  if (fieldValue && fieldValue != '') {
    questionsAndValues[fieldName] = fieldValue;
  }

  const values = [];
  let sumOfValues = 0;

  for (let j = 0; i < workflow_value; j++) {
    const current_value = college.getJobWorkflowValueByNam(workflow_value[j]);
    values.push(current_value);
  }


  for (let j = 0; j < values.length; j++) {
    const current_value = parseFloat(values[j]);
    if (!isNaN(current_value)) {
      sumOfValues += parseFloat(values[j]);
    } else {
      console.log('invalid values');
    }
  }
}