Can't return array

Hi guys,

I feel I’m mostly compelte on this challenge, but I’m stuck on the final step because I’m unable to return an array when iterating through the variable arrays in batch for the findInvalidCards stage.

I even tried to use Array.from which return an array fromt he list of numbers that it gives me (not in array form) and it still seems to come back in type ‘object’.

Does anyone know where I may be going wrong here. Any more explianation needed please let me know - hope that’s clear.

Thanks

// 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 total = 0; for (let i = 0; i < array.length; i++) { let item = array[array.length - i - 1]; if (i == 0) { total += item; // console.log('first: ' + item) } else if (i % 2 == 1){ let doubleNos = item*2; if (doubleNos > 9) { doubleNos -= 9; total += doubleNos; // console.log('Progressive total: ' + total) } else { total += doubleNos; // console.log('Normal double: ' + doubleNos) } } else { total += item; } } // console.log('yay' + total) // console.log(total % 10) if (total % 10 == 0) { console.log('Its true'); return true; } else { console.log('Its false'); return false; } } const findInvalidCards = array => { let invalidNos = [] array.forEach(cardNos => { arrNos = Array.from(cardNos) if (!validateCred(arrNos)) { invalidNos.push(arrNos); } }); console.log(invalidNos) return invalidNos; } let invalid = findInvalidCards(batch) console.log(typeof invalid) const idInvalidCardCompanies = array => { let invalidCompanies = []; for (let i = 0; i < array.length; i++) { let first = array[i][0]; switch (first) { case 3: if(invalidCompanies.indexOf(first) === -1) { invalidCompanies.push('Amex (American Express)') break; } case 4: if(invalidCompanies.indexOf(first) === -1) { invalidCompanies.push('Visa') break; } case 5: if(invalidCompanies.indexOf(first) === -1) { invalidCompanies.push('Mastercard') break; } case 6: if(invalidCompanies.indexOf(first) === -1) { invalidCompanies.push('Discover') break; } } } } idInvalidCardCompanies(invalid) // validateCred(mystery1) // validateCred(valid1) // validateCred(valid2) // validateCred(valid3) // validateCred(valid4)

Hi,

2 issues here, function structure and scope.

Your function idInvalidCardCompanies() should look to return an array. At the moment it only creates an array within it’s own scope, meaning it won’t be accessible on the outside.

Then, once you have a function that returns an array, you can store that array inside a variable outside as needed for testing.

It’s technically not required. that functions return things but it is fairly common practice in javascript. If it had an outside dependency/effect then it’d be harder to track issues with the function.

1 Like

Brilliant thanks. So if I declare the array am outside of the function it should solve both?

1 Like

You need to add a return statement in the function at least. Then you can use the function to take input and give desired output.

Got it. It worked. Thanks again

1 Like