Credit-card-checker project

https://www.codecademy.com/paths/full-stack-engineer-career-path/tracks/fscp-javascript-syntax-part-ii/modules/fecp-challenge-project-credit-card-checker/projects/credit-card-checker

Hi everybody, I’m stuck with this project, I did this function,“validateCred” and it seems it’s working but when I’m going on with the next, I have this problem…
I have seen the solution, but I don’t understand why I can’t do it in this way…

this is the code

// 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:

validateCred=array=>{

  let newArray = [];

  console.log(array);

  

  array.pop();

  newArray = array.reverse();

  console.log(newArray);

  let sumReverse = 0;

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

        

    let multiPosicion = 0;

    //console.log(i+1);

    if(i !=0 && i % 2 != 0){

      //console.log(newArray[i]*2);

      multiPosicion += newArray[i] * 2;

      //console.log(multiPosicion);

      //sumReverse += multiPosicion;

      //console.log(sumReverse);

    }

    if(multiPosicion>9){

      multiPosicion -= 9;

      console.log(multiPosicion);

      sumReverse += multiPosicion;

    }else{

      sumReverse += multiPosicion;

    }

    

  }

  //console.log(sumReverse);

return sumReverse%10 ==0 ?  true: false;

          

  };

  function findInvalidCards(array){

    const invalidCard = [];

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

      let creditCard = array[i];

      //console.log(creditCard);

      if(validateCred(creditCard) === false ){

        console.log(validateCred(creditCard));

        invalidCard.push(array[i]);

      }

    }

      return invalidCard;

  };

  

  //array.forEach(element=>console.log(element));

  //console.log(array.reverse());

  

console.log(validateCred(valid1));

console.log(validateCred(invalid1));

console.log(findInvalidCards(invalid1));

and this is the error message...

/home/ccuser/workspace/credit-card-checker/main.js:32
  array.pop();
        ^

TypeError: array.pop is not a function
    at validateCred 

Any help I aprecciate it...
Thank you

Hello! I think this question on StackExchange might be very useful. See if .pop() is really called on an array when you do

Thank you for your answer…
But well, when I log “console.log(validateCred(valid1));” , it works…
I don’t know if I have to change my code… but well I don´t understand why…

I think this project have a high level for persons like me that we are beggin…
I don’t understand the purpose to follow other codes so…
I feel disapointed

Sorry, I was reading your code incorrectly. I’ll get back to you.

The error is being thrown on this line:

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

      let creditCard = array[i];

      //console.log(creditCard);

      if(validateCred(creditCard) === false ){

        console.log(validateCred(creditCard)); <--this line is throwing the error

        invalidCard.push(array[i]);

This is because you pass into the findInvalidCards function the invalid1 array. Which means that the loop is actually iterating through this array:

And so when you call validateCred within the loop, you’re actually calling it on each number within the invalid1 array. And you can’t call .pop() on an integer.

I hope this helps!

Thank you very much…
I apreciate a lot your help…

1 Like