此代码的目的是确定哪个信用卡具有最高金额并返回该数字。如果有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']));
答案 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
将等于所有信用卡号码的最高金额。