Never use a for..in loop to iterate over an array.
 
Without seeing the code in the context of a running test page, I can't tell
you why IE is seeing a bogus element in the array, but I can speculate that
some other code elsewhere in the page is adding a method to Array.prototype
in IE only. That method would be enumerated during the for..in loop.
 
You can fix this by using a proper technique to loop through the array. You
could use $.each, or a "for( i = 0, n = data.length;  i < n;  i++ )" loop.
Or, since you know the array doesn't contain any null elements, here's my
favorite technique (along with a couple of other minor improvements):
function loadResults(data) {
  var OPT_VOTES = 2;
  var total_votes = 0;
  
  for( var item, i = -1;  item = data[++i]; ) {
    votes = +item[OPT_VOTES];
    total_votes += votes;
    alert( "total_votes=" + total_votes + " --- " + votes );
  }
}
-Mike



  _____  

From: Bruce MacKay

Hi folks,

The following snippet processes a JSON string sent back to the browser (it
is part of a poll)

function loadResults(data) {
  var OPT_VOTES = 2;
  var total_votes = 0;
  
  for (id in data) {
    total_votes = total_votes+parseInt(data[id][OPT_VOTES]);
                  alert("total_votes="+total_votes+" --- " +
data[id][OPT_VOTES]);
  }
}

The JSON string looks like this...


[["1","High cost","23","What

is the biggest challenge to recycling irrigation

water?"],["2","Disease and algae

management","12","5"],["3","Plentiful

and cheap water","8","4"]]


The problem I'm having is that IE7 appears to see 4 rows in the array - and
consequently returns "total_votes=NaN --- undefined" at the first alert and
"total_votes=NaN --- 23" at the second loop and so on.

FF, Opera, and Safari all handle the code without problem - can anyone help
me understand what IE7 is getting upset about?

Thanks,

Bruce 

Reply via email to