Credit Card Checker Project

Hello Folks
I’m having some trouble with Task 4 i.e. my findInvalidCards function is not working properly after constant finding for error I’m Unable to find it, after quite some time of debugging it’s giving me only empty array. Please someone try to give me some hint so that I can know where I’m being wrong.

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:
const validateCred = (array)=>{
  let arrDouble = [];
  // this loop push the every other digits from the array 
  for(let i = array.length - 2; i >= 0; i -= 2){
    arrDouble.push(array[i]*2);
  }
  // this doubles the every second number inside the array
  arrDouble = arrDouble.map(dou => {
    if(dou > 9){
      return dou - 9;
    }else{
      return dou;
    }
  });
  // this loop is used to push the other remaining numbers
  for(let j = array.length - 1; j >= 0; j -= 2){
    arrDouble.push(array[j]);
  }
  // checking if sum of numbers is divisible by 10 which returns true or false using ternary operator
  if (arrDouble.reduce((a,b)=> a + b) % 10 === 0) {
    return true;
  }else {
    return false;
  }
}


/* this function mainly checks from the nested array of credit cards and check if the credit card is valid or invalid and pushes all the invalid cards in to seperate array */
const findInvalidCards = (nestArray)=>{
  const invalidCred = []
  for(let i = 0; i < nestArray.length; i++){
    const bool = validateCred(nestArray[i]);
    if(bool === "false") {
      invalidCred.push(nestArray[i]);
    }
  }
  console.log(invalidCred);
}

findInvalidCards(batch);

Output:

Let me know where I’m being wrong
Thank You

Consider how you’re creating your conditional statement.

The bug is in the statement, consider the types of comparison (integer, float, bool, string, etc).

1 Like

Thank You for pointing out the mistake, it was a simple mistake i.e. instead of “false” you have to compare to false.

Previous Code:

const findInvalidCards = (nestArray)=>{
  const invalidCred = []
  for(let i = 0; i < nestArray.length; i++){
    const bool = validateCred(nestArray[i]);
// The comparison is done wrong with the boolean statement
    if(bool === "false") {
      invalidCred.push(nestArray[i]);
    }
  }
  console.log(invalidCred);
}

After debugging

const findInvalidCards = (nestArray)=>{
  const invalidCred = []
  for(let i = 0; i < nestArray.length; i++){
    const bool = validateCred(nestArray[i]);
    if(bool === false) {
      invalidCred.push(nestArray[i]);
    }
  }
  console.log(invalidCred);
}

Thank You