请逐行解释这个工作代码

时间:2017-05-17 01:44:56

标签: javascript arrays for-loop indexing sum

此代码的目的是确定哪个信用卡具有最高金额并返回该数字。如果有2张具有相同金额的信用卡,则代码会返回靠近数组末尾发生的卡。我理解大部分代码,但我不明白如何找到最大的和和最高的索引。请详细说明代码。谢谢。

function getHighestCCNumber(ccNumbers) {
  var ccNumber,
      highestSum = 0,
      highestIndex,
      sum,
      i,
      j;
  for (i = 0; i < ccNumbers.length; i++) {
    ccNumber = ccNumbers[i].split("-").join("");
    sum = 0;
    for (j = 0; j < ccNumber.length; j++) {
      sum += parseInt(ccNumber.charAt(j), 10);
      }

    if (sum >= highestSum) {
      highestSum = sum;
      highestIndex = i;
      }
  }
  return ccNumbers[highestIndex];
  }

alert(getHighestCCNumber(['9999-99999', '4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260']));

2 个答案:

答案 0 :(得分:0)

  var ccNumber,
  highestSum = 0,
  highestIndex,
  sum,
  i,
  j;

此代码块只是初始化6个变量,包括将highestSum设置为0。

for (i = 0; i < ccNumbers.length; i++) {

此行迭代(循环)遍历ccNumbers数组中的所有项目,一次处理一个

ccNumber = ccNumbers[i].split("-").join("");

此行会从信用卡中删除所有-个字符

for (j = 0; j < ccNumber.length; j++) {
      sum += parseInt(ccNumber.charAt(j), 10);
  }

此块将信用卡号内的所有数字加在一起,得到总和。它存储在本地sum变量

if (sum >= highestSum) {
  highestSum = sum;
  highestIndex = i;
  }

此块检查当前计算的总和是否大于当前找到的最大总和。如果是,则总和存储在函数变量highestSum中,并且我们当前正在处理的信用卡号的索引存储在函数变量highestIndex中。

return ccNumbers[highestIndex];

此行只根据我们从上一代码中存储的索引返回最高信用卡号。

所有这些都包含在一个函数中,该函数将一组信用卡值作为参数,并且行...

alert(getHighestCCNumber(['9999-99999', '4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260']));

...只需调用该函数并将响应提醒回用户。

答案 1 :(得分:0)

highestSum并不总是等于零。每次循环我们计算当前总和sum。诀窍是,如果sum高于highestSum,则highestSum等于sum

例如,在第一次循环(即第一个信用卡号)时,假设我们计算了49的总和。这高于highestSum的初始值,即0,所以highestSum设置为49.然后在第二次循环时,假设我们计算的值为37.这小于highestSum的当前值,它仍然是49,所以{{1 }} 保持不变。在我们以这种方式浏览所有信用卡号码后,highestSum将等于所有信用卡号码的最高金额。