Credit Card Checker: JS Heap out of Memory

Hello, has anyone received the error ‘JavaScript heap out of memory’?
This doesn’t really seem to make sense to me as my code isn’t even 100 lines long. I included the code in case you wanted to look at it, I’m not sure if I should post the entire error message as it’s quite long, but I can if you need to see it. I’m just trying to make the code under comment ‘//above works’ functional. Thanks for any help.

// 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 reversedArray = array.reverse();
    let newArray = [];
    for (let index = 0; index < reversedArray.length; index++) {  
        if (index % 2 !== 0) {
            newArray.push((reversedArray[index] * 2));
        } else if (index % 2 === 0) {
            newArray.push((reversedArray[index]));
        }
        if (newArray[index] > 9) {
            newArray[index] = newArray[index] - 9;
        }
    }
    let sumOfArray = 0;
    for (let index = 0; index < newArray.length; index++) {
        sumOfArray += newArray[index];
    }
    if (sumOfArray % 10 === 0) {
        return true;
    } else {
        return false;
    }
};

let invalidCards = [];

const findInvalidCards = nestedArray => {
    for (let index = 0; index < nestedArray.length; index++) {
        if (validateCred(nestedArray[index]) === false) {
            invalidCards.push(nestedArray[index].reverse()); 
        }
    }
    return invalidCards;
}

findInvalidCards(batch);

//above works

let invalidCardSuppliers = [];

const idInvalidCardCompanies = cardArray => {
    for (let index = 0; index <= cardArray.length; index++) {
        for (let index2 = 0; index2 < 1; index2) {
        if ((cardArray[index][index2]) === 3) {
            invalidCardSuppliers.push('Amex (American Express)');
        } else if ((cardArray[index][index2]) === 4) {
            invalidCardSuppliers.push('Visa');
        } else if ((cardArray[index][index2]) === 5) {
            invalidCardSuppliers.push('Mastercard');
        } else if ((cardArray[index][index2]) === 6) {
            invalidCardSuppliers.push('Discovery');
        } else {
            invalidCardSuppliers.push('Company not found');
        }
            
        }
    }
    return invalidCardSuppliers;      
};

console.log(idInvalidCardCompanies(invalidCards));

Looks like you have an infinite loop here.

1 Like

Thank you so much!!!

1 Like

This topic was automatically closed 18 hours after the last reply. New replies are no longer allowed.