我正在编写一个编码挑战并相信我接近一个解决方案,但我目前卡住了,并希望得到一些见解。我正在尝试构建一个可以采用一组数字(信用卡号码包括破折号)的功能,比较每个数字的总和,并返回最高的信用卡号。解决方案必须使用Javascript。该函数当前正在返回" undefined"。在此先感谢您的帮助!
function highestCredit(creditArray){
var highSum = 0;
var highIndex = 0;
var sum= 0;
//loop through each value in the array
for (i = 0; i < creditArray.length; i++) {
//loop that disregards dashes and adds up the sum of a single credit card number
for (a = 0; a < creditArray[i.length]; a++) {
if(isNaN(creditArray[i].charAt(a)) === false){
sum += parseInt(creditArray[i].charAt(a));
}
}
//compare current sum to highest sum, update the index if there is a new high number
if (sum >= highSum) {
highSum = sum;
sum = 0;
highIndex = i;
}
}
return creditArray[i];
}
console.log(highestCredit(['4916‐2600‐1804‐0530', '4779‐252888‐3972', '4252‐278893‐7978' ,'4556‐ 4242‐9283‐2260']));
答案 0 :(得分:0)
嗯,你不想归还creditArray[highIndex]
而不是creditArray[i]
吗?
答案 1 :(得分:0)
您有一些错误,请参阅工作示例
function highestCredit(creditArray) {
var highSum = 0;
var highIndex = 0;
var sum = 0;
for (i = 0; i < creditArray.length; i++) {
for (a = 0; a < creditArray[i].length; a++) { // error with length
if (isNaN(creditArray[i].charAt(a)) === false) {
sum += parseInt(creditArray[i].charAt(a), 10);
}
}
if (sum >= highSum) {
highSum = sum;
sum = 0;
highIndex = i;
}
}
return creditArray[highIndex]; // should return 'highIndex', not 'i'
}
document.write(highestCredit(['4916‐2600‐1804‐0530', '4779‐252888‐3972', '4252‐278893‐7978' ,'4556‐ 4242‐9283‐2260']));
&#13;
答案 2 :(得分:0)
有两个问题。
for (a = 0; a < creditArray[i.length]; a++) {
应为for (a = 0; a < creditArray[i].length; a++) {
。 .length
应该在[]
creditArray[highIndex]
答案 3 :(得分:0)
var creditCards = ["00-00-1-00", "00-00-2-00", "00-00-3-00", "00-00-4-00"];
function cardIdToObject(cardId) {
//remove the dashes
var cardIDAsString = cardId.replace(/\D/g, '');
//tansform the number as an array of character
var cardIDAsArray = cardIDAsString.split('');
// sum all the characters individually ..
var cardIDAsInteger = cardIDAsArray.reduce(function(p,c){return p + parseInt(c) },0);
//create an object containing the original id and the calculated sum for later comparison
var cardAsObject={};
//store the original id
cardAsObject.id=cardId;
//store the calculated sum of individual characters of the card number
cardAsObject.sum=cardIDAsInteger;
// returns object
return cardAsObject;
}
function biggestCard(p, c, i) {
return p.sum > c.sum ? p : c;
};
console.log("The biggest card id is :" + creditCards.map(cardIdToObject).reduce(biggestCard).id);