CREDIT CARD CHECKER: Please help with my findInvalidCards() function

Can anyone tell me why my findInvalidCards() function is returning an empty string please

// 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, ]; //console.log(mystery1); // Add your functions below: let validateCredit = (array) => { //reversing the array let reversedArray = array.slice().reversed(); //looping through reversedArray and doubling every element let newArray = reversedArray .map((arr) => { let doubledNumber = arr * 2; //subtracting any digit that is greater than 9 if (doubledNumber > 9) { return (doubledNumber -= 9); } return doubledNumber; }) //adding up all elements .reduce((item, accumulator) => { return item + accumulator; }); //returns invalid when sum of elements is not divisible by 10 if (newArray % 10 === 0) { return "valid"; } else { return "invalid"; } return newArray; }; //console.log(validateCredit(mystery3)); let findInvalidCards = (arr) => { let invalidCards = []; arr.forEach(cardArr => { cardArr.filter((validateCredit) => { if (validateCredit === "invalid") { console.log(invalidCards.push(cardArr)); } }); }); return invalidCards; }; console.log(findInvalidCards(batch));
cardArr.filter((validateCredit) => {
      if (validateCredit === "invalid")

validateCredit in this context is a digit. That means validateCredit === "invalid" will always be false.
Somewhere you would want to call the validateCredit function.

Also, the filter method is not applied correctly. You do not need to add an if clause inside the callback function. That will happen under the hood of the filter() method. You just need to add a condition.

Edit:

You only need the outer forEach method for your purpose. The validateCredit function takes an array with the digits of a single credit card. That’s what cardArr is. So you need to pass cardArr as an argument to the validateCredit function and push cardArr to invalidCards if
validateCredit(cardArr)==='valid'

Thank you so much, it makes sense. I’ve changed my code to this :

let findInvalidCards = (arr) => {
  let invalidCards = [];

  arr.forEach(cardArr => {
    if(validateCredit(cardArr) === 'invalid'){
      console.log(invalidCards.push(cardArr))
    }
  });

  return invalidCards;
};

console.log(findInvalidCards(batch));

However,
invalidCards is returning almost all of the arrays accept one. I dont undestand why, I’ve checked my previous function and noticed that only mystery3 returns valid, which is incorrect. Can you guide me through this one please. I thought I have done all the steps correctly.

Your validateCard function is also not correct.

array.slice().reversed();

reversed() is not an array method.

I fixed that already, I realized the checker digit shouldnt get doubled. Thats most likely why its returning all the arrays. There probably isnt a way to double all the numbers accept the first one with the forEach() or the map() iterators.

If I remember correctly, only every other digit except the check digit should be doubled. Not every digit. So the forEach() or map() methods aren’t the most appropriate ones. Try a for loop.