Credit Card Checker Project

Hi guys,

Is there any way of returning the variables names instead of its arrays on .filter method?
My code is returning the arrays, and I want to know which of the cards are invalid:

// 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) => { let checkerArray = []; checkerArray.push(arr[arr.length -1]); for (let i = arr.length -2; i >= 0; i -= 2) { checkerArray.push(arr[i] * 2); }; for (let j = arr.length -3; j >= 0; j -= 2) { checkerArray.push(arr[j]) }; for (let k = 0; k < checkerArray.length; k++) { if (checkerArray[k] >= 10) { checkerArray[k] = checkerArray[k] - 9; }; }; const reducer = (accum, current) => accum + current; const toMod = checkerArray.reduce(reducer); if (toMod % 10 === 0) { return true } else {return false}; }; const findInvalidCards = (cards) => { let invalidCards = cards.filter(card => validateCred(card)); return invalidCards; //console.log(invalidCards); }; console.log(findInvalidCards(batch));

I accept any help, even on other parts of the code, besides everything is working I know that there is a more efficient method to follow.

Best,
Erick

Correct me if I’m wrong, but what you’re asking for is the following: you have stored variables in an array, and you want to print the variable names (rather than their value).

What you’re asking for seems like it would be more efficient to do in a map.

The issue with the original idea is that when you store these variables in the array you’re really storing the value rather than the variable name (almost sure about this, someone more versed in js can correct me, the quirks and mysteries of the language are many). This prevents you from using something like Object.keys() to retrieve the name.

Consider that C-style arrays have a type, and you could only store data of the same type value (int, float, char, etc). Any excess data like a variable name would not really work with the original concept of array.

Luckily the map is a straightforward way that allows one to track key-value pairs. Map - JavaScript | MDN

But also just using an object is good enough too:

fbb = {
  "foo": 15,
  "bar": 3,
  "baz": 25
}

console.log(Object.keys(fbb));
//[ 'foo', 'bar', 'baz' ]
1 Like

Hey thanks for you reply, I want you to know that you have helped me months ago when I was deciding to shift my career, can’t remember the subject but your name! lol

You got the point, these arrays were provided by Codecademy, and the propose of the project is not to print the variables names, only return true or false.

I have searched for some solutions and I think the better one is align with yours, that is to create a ‘Dictionary’ like, using .map to transform those arrays into an object, and then I can set the keys for the credit card number and a name.

I hope that someday I will be able to support the community like you do!
Best,
Erick