Credit Card Checker

Hello,
I’m currently doing the full-stack Engineer Path. I’m at 32%. I have also done the basic Javascript course. For the Credit Card Checker, the function I wrote doesn’t work: I have a an error message when I try it on the array valid1. I would really love and appreciate if anyone could help me, thanks in advance.

Have a great day !

// 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 validatedCred = array =>  {
  let newArray = [];
  for(let i = array.length - 1; i >=0; i--){
    if(i = array.length - 1){
      newArray.push(array[i]);
    }else{
      let toPush = array[i]*2;
      if(toPush > 9){
        toPush = toPush - 9;
      } 
      newArray.push(toPush);
    }
  }
  const sum = array.reduce(function(a, b){
        return a + b;
    }, 0);
  if(sum % 10 === 0){
    return true
  }else{
    return false
  }
}
validatedCred(valid1)

Up here is my function.
The message I get :


These are the instructions :

  1. Remove the last element from the array, (but remember, you don’t want to alter the original array!).
  2. Reverse the array (now without the last digit).
  3. Multiply the digits in odd positions (e.g. first digit, third, fifth…etc) by 2 . If the resulting number is over 9 , subtract 9 from the number.
  4. Add up all the numbers in the array as well as the dropped digit from step 1. If the sum modulo 10 is 0 then the array contains a valid number. Conversely, if the result is any number but 0 , then the array contains an invalid number.

Hi, I tried to update my code :

const sum = arr => arr.reduce((a,b) => a + b, 0)
const newArray = [];

const validatedCred = array =>{
  for(let i = array.length - 1; i >=0; i--){
    if(i = array.length - 1){
    newArray.push(array[i]);
    }else if(i % 2 === 0){
      newArray.push(array[i]);
    }else if(i % 2 != 0){
      if(array[i]*2 > 9){
        newArray.push(array[i]*2 - 9)
    }else{
       newArray.push(array[i]*2)
    }
    }
  }
    if(sum(newArray) % 10 === 0){
    return true
  }else{
    return false
  }
  }

console.log(validatedCred([4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]))

Hi Jules,

the error message states “Javascript heap out of memory” which indicates that you’re running an infinite loop.
The for loop counts down to zero and would stop there, but in the first if clause, you always reset i to array.length - 1.

PS: If you post Javascript problems in the Get Help -> Javascript category, I’m sure that help will be on the way much faster.

2 Likes

Hi,
Thanks for your answer, it was indeed the problem in my code. I’ll keep in mind to put the right tag next time.

Have a great day.

1 Like