Credit Card step 7 make card valid

Hello,
I am trying to do the extra challenge in Credit Card Checker Project, making the invalid card numbers into valid ones.
The invalid numbers start with 3,4,5 or 6, so I am trying to change array[i][0] to either 1,2,7 or 8 and add the new valid numbers to an array. Look at makeCardValid function at the bottom.

currently I’m getting the exact opposite of what I want, a huge array of invalid numbers…

I’ve tried doing

  • case: if (index !== -1) for each case in the switch statement and I get an empty array
  • const index = array.indexOf(array[i]) instead of const index = nowValid.indexOf(array[i])

and

  • nowValid.indexOf(array[i][0])

Any help is appreciated! Thank you

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

// 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 = arr => {
  const len = arr.length
  const parity = len % 2
  let sum = 0
for (var i = len-1; i>=0; i--){
  let dub = parseInt(arr[i])
  if (i % 2 === parity) {dub *= 2}
     if (dub > 9) {dub -= 9}
     sum += dub
}     return sum % 10
} 
luhn_caclulate = partcode => {
    var checksum = (partcode + "0")
    return checksum == 0 ? 0 : 10 - checksum
}

/* luhn_validate
 * Return true if specified code (with check digit) is valid.
 */
luhn_validate = fullcode => {
    return validateCred(fullcode) == 0
}

// console.log(luhn_validate(valid1))

findInvalidCards = card => {
  let invalidCard = []
  for (let i=0; i < card.length; i++){
    if (!validateCred(card[i])){
    invalidCard.push(card[i])
  }
  }
  return invalidCard; 
} 

invCards = findInvalidCards(batch)  
console.log(invCards)

idInvalidCardCompanies = array =>{
  const companies = []
    // array.forEach(arr => arr.forEach(elmnt => {
    //   let firstDigit = elmnt.shift
    //   console.log(firstDigit)
  for (i=0; i < array.length; i++){    
    switch (array[i][0]) {
      case 3:
        if (companies.indexOf('Amex') === -1) {
        companies.push('Amex')
        }
        break;
      case 4:
        if (companies.indexOf('Visa') === -1) {
        companies.push('Visa')
        }
        break;
      case 5: 
        if (companies.indexOf('Mastercard') === -1) {
        companies.push('Mastercard')
        }
        break;
      case 6:
        if (companies.indexOf('Discover') === -1) {
        companies.push('Discover')
        }
        break;   
      default:
        console.log("company not found")
    } 
    } return companies
} 

console.log(idInvalidCardCompanies([invalid1])); 
console.log(idInvalidCardCompanies([invalid2]));
console.log(idInvalidCardCompanies(invCards));

makeCardValid = array =>{
  nowValid = []
  for (i=0; i < array.length; i++){
  const index = nowValid.indexOf(array[i])
  // const index = array.indexOf(array[i])
    switch (array[i][0]) {
      case 3:
         if (index === -1) {
           array[index] = 1
          nowValid.push(array);
        } 
        break;
      case 4:
         if (index === -1) {
           array[index] = 2
          nowValid.push(array);
        } 
        break;
      case 5: 
         if (index === -1) {
           array[index] = 7
          nowValid.push(array);
        }
        break;
      case 6:
         if (index === -1) {
          array[index] = 8
          nowValid.push(array);
        }
        break;   
    } 
    } 
    return nowValid
} 

console.log(makeCardValid(invCards))


Hi @core2761115992
I haven’t checked if your approach would actually lead to success, so I just concentrate to why your index variable doesn’t store anything but -1 for now:

You are trying to find out the index of a value inside an empty array nowValid. I think you should add the keyword const to declare the array, but still it’s an empty array. Therefore nowValid.indexOf() cannot return anything else than -1.
But even if you replace it with with array.indexOf(array[i]) it would just return the same value as i. Which value are you trying to store in the index variable?