Anonymous
Anonymous

Reputation: 4632

IE 8 Array iteration

Hi I'm debugging my page for IE8 compat mode, and this script just doesn't like to work and crushes.

Basically it had to iterate through a 3D array, and add a local path to a variable. Well I could do it otherwise, but I'm just curious why the ** it never works...

Any suggestions are welcome :) Here's the code:

for(i=0;i<menu_items_p.length;i++)
for(j=0;j<menu_items_p[i].length;j++)
menu_items_p[i][j][1]='http://127.0.0.1/'+menu_items_p[i][j][1];

and the array looks something like this:

var menu_items_p =
[
    [   //Products
        ['Health Care', 'products/health.php'],
        ['Aroma Therapy','products/scents.php'],
    ],
            [      // Empty
             ],
    [   //Test
        ['What ever', 'spirulina/about.php'],
    ]
]

The problem though is that it sometimes have empty values, and array.length triggers some error...

Upvotes: 1

Views: 593

Answers (3)

Anonymous
Anonymous

Reputation: 4632

AS suggested by Yoshi and ThiefMaster, I made it following, and this is what solved it:

for(var i=0;i<menu_items_p.length;i++)
if (menu_items_p[i] !== undefined)
for(var j=0;j<menu_items_p[i].length;j++)
if (menu_items_p[i][j] !== undefined)
menu_items_p[i][j][1]='http://127.0.0.1/'+menu_items_p[i][j][1];
  1. Global vars replaced.
  2. Check for undefined.

It's a pity they didn't answer in a formal way, so I would have to answer my self :) Thanks everyone!

Upvotes: 0

Luc125
Luc125

Reputation: 5837

Maybe your code could handle empty values this way:

for(var i = 0; i < menu_items_p.length; i++) {
    // we skip the value if it is empty or an empty array 
    if(!menu_items_p[i] || !menu_items_p[i].length) continue; 
    for(var j = 0; j < menu_items_p[i].length; j++) {
       // again, we skip the value if it is empty or an empty array
       if(!menu_items_p[i][j] || !menu_items_p[i][j].length) continue;
       menu_items_p[i][j][1] = 'http://127.0.0.1/' + menu_items_p[i][j][1];
    }
}

Upvotes: 0

Andrew D.
Andrew D.

Reputation: 8230

When used your original array declaration:

var menu_items_p =
[
    [   //Products
        ['Health Care', 'products/health.php'],
        ['Aroma Therapy','products/scents.php'],
    ],
            [      // Empty
             ],
    [   //Test
        ['What ever', 'spirulina/about.php'],
    ]
]

error occurs in IE8 but not in IE9. Just remove two commas:

var menu_items_p =
[
    [   //Products
        ['Health Care', 'products/health.php'],
        ['Aroma Therapy','products/scents.php'] // here comma removed
    ],
            [      // Empty
             ],
    [   //Test
        ['What ever', 'spirulina/about.php'] // here comma removed
    ]
]

and all must work fine.

Upvotes: 3

Related Questions