0

While trying to add new elements to the array I have, I get the error "Uncaught TypeError: Cannot set properties of undefined (setting '1')".

var arry = [[[[]]]],
    i1 = 0,
    i2 = 0,
    intervalRate = 1000;
    turn = 0, a = 10, b = 5;

for(i = 0; i < 2; i++) arry.push([]);

    setInterval(() => {
        
        
        arry[turn][i1][i2] = ([a, b]); //the error comes in this line
        i2++;
        if(i2 % 5 == 0 && i2 != 0){
            i1++;
            i2 = 0;
            arry.push([]);
        } 

        turn++;
        if(turn == 3) turn = 0;

        a += 5; b += 5;

    }, intervalRate);

How can I solve this?

1
  • 1
    arry.push([]) only adds an empty array to your arry, so when you try to access the array in that array, it doesn't exist. arry is 2 levels deep, but you're only adding 1 level with this line. Commented Aug 16, 2022 at 8:08

1 Answer 1

1

If you run this code snippet JSFiddle:

var arry = [[[[]]]],
    i1 = 0,
    i2 = 0,
    intervalRate = 1000;
    turn = 0, a = 10, b = 5;

for(i = 0; i < 2; i++) arry.push([]);

console.log(arry);
console.log(arry[0][0]);
console.log(arry[1][0]);

Console output is:

[[[[]]], [], []] // 3 root elements
[[]] // 1st child of array[0];
undefined // 1st child of array[1]

So to fix, you would have to initialize all elements of all array dimensions, but the last one. If you use arry[turn][i1][i2], you have to cover (initialize upfront) for all possible values of turn and i1 to avoid error. Or, even better, to change the approach/algorithm completely. Find cleaner way.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.