Credit Card Checker: Help

Hi,

I’m currently working on the Credit Card Checker challenge project. I managed to finish the first part of the challenge (until task 3) with the code returning the expected answers.

// All valid credit card numbers const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]; const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9]; const valid3 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6]; const valid4 = [6, 0, 1, 1, 1, 4, 4, 3, 4, 0, 6, 8, 2, 9, 0, 5]; const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6]; // All invalid credit card numbers const invalid1 = [4, 5, 3, 2, 7, 7, 8, 7, 7, 1, 0, 9, 1, 7, 9, 5]; const invalid2 = [5, 7, 9, 5, 5, 9, 3, 3, 9, 2, 1, 3, 4, 6, 4, 3]; const invalid3 = [3, 7, 5, 7, 9, 6, 0, 8, 4, 4, 5, 9, 9, 1, 4]; const invalid4 = [6, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5]; const invalid5 = [5, 3, 8, 2, 0, 1, 9, 7, 7, 2, 8, 8, 3, 8, 5, 4]; // Can be either valid or invalid const mystery1 = [3, 4, 4, 8, 0, 1, 9, 6, 8, 3, 0, 5, 4, 1, 4]; const mystery2 = [5, 4, 6, 6, 1, 0, 0, 8, 6, 1, 6, 2, 0, 2, 3, 9]; const mystery3 = [6, 0, 1, 1, 3, 7, 7, 0, 2, 0, 9, 6, 2, 6, 5, 6, 2, 0, 3]; const mystery4 = [4, 9, 2, 9, 8, 7, 7, 1, 6, 9, 2, 1, 7, 0, 9, 3]; const mystery5 = [4, 9, 1, 3, 5, 4, 0, 4, 6, 3, 0, 7, 2, 5, 2, 3]; // An array of all the arrays above const batch = [valid1, valid2, valid3, valid4, valid5, invalid1, invalid2, invalid3, invalid4, invalid5, mystery1, mystery2, mystery3, mystery4, mystery5]; // Add your functions below: const validateCred = arr => { const arrO = arr let lastDigit = arr.pop(); let numResult = 0 + lastDigit; for (let i = 0; i < arr.length; i++){ arr.reverse(); if (i%2 === 0){ arr[i] *= 2; if (arr[i] > 9){ arr[i] -= 9; } } numResult += arr[i] } if (numResult%10 === 0){ return true } else { return false } } //============================// const findInvalidCards = arr1 =>{ for (let j = 0; j < arr1.length; j++){ if (validateCred(arr1[j]) === false){ console.log(arr1[j]) } } } findInvalidCards(batch)

The validateCred function is working as needed on its own.

Once I use the function inside the findInvalidCards function, it prints out the credit card number after running the loop (inside the validateCred) instead of just running the function and returning the original array inputed.

Also, for some reason, the findInvalidCards prints the value of valid5 although when tested it returns true.

How can I fix that? I’ve been stuck for a while trying to figure it out :cry:

Thank you in advance!!

This line:

  const arrO = arr

does not make a copy of the array. What you do afterwards (like .pop() changes the original array also. Even if you used the newly created variable. Make a copy with the spread syntax ([...arr] or the .slice() method.

This: arr.reverse(); only needs to be done once. And you need that in order to the the forwards for loop. So it doesn’t belong inside the for loop.

1 Like