tags:

views:

97

answers:

3
var array1 = {};

array1['one'] = new Array();
array1['one']['data'] = 'some text';
array1['one']['two'] = new Array();
array1['one']['two']['three'] = new Array();
array1['one']['two']['three']['data'] = 'some other text';

$.each(array1, function(key1, value1){
    $.each(value1['two']['three'], function(key1, value1){
        document.write('test');
    }
});

everything works, except it doesnt get to the document.write. Anyone an idea why?

+1  A: 

The document.write isn't working as you've a syntax error, so the code flow never gets to it - you need another bracket at the end of your each, i.e.

$.each(array1, function(key1, value1){
    $.each(value1['two']['three'], function(key1, value1){
        document.write('test');
    })
});

If you're going to be doing any non-trivial work with javascript, I'd highly recommend that you use Firefox with Firebug installed - it's console highlights these kind of errors which would otherwise fail without you realising, leading you to believe everything was working ok.

ConroyP
Yes on the platform, or another browser, but at least capture the error details Webpage error details as I did by clicking the error notation in an IE window by double clicking it in the status bar:User Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDR; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)Timestamp: Tue, 24 Aug 2010 15:28:09 UTCMessage: Expected ')'
Mark Schultheiss
that still does not hit the document.write as you see here: jsfiddle.net/yPYWd
Mark Schultheiss
+1  A: 

You miss ) in the second each.

Topera
that still does not hit the document.write as you see here: http://jsfiddle.net/yPYWd/
Mark Schultheiss
+2  A: 

Note that the Array() replacement is key here with the missing ')'

var array1 = {};

array1['one'] = new Object();
array1['one']['data'] = 'some text';
array1['one']['two'] = new Object();
array1['one']['two']['three'] = new Object();
array1['one']['two']['three']['data'] = 'some other text';

$.each(array1, function(key1, value1) {
    $.each(value1['two']['three'], function(key1, value1) {
        document.write('test');
    });
});

and Another way to write the same thing:(small tweek on the write to reference your object)

var array1 = {};

array1.one = new Object();
array1.one.data = 'some text';
array1.one.two = new Object();
array1.one.two.three = new Object();
array1.one.two.three.data = 'some other text';


$.each(array1, function(key1, value1) {
    $.each(value1['two']['three'], function(key1, value1) {
        document.write('test' + array1.one.data);
    });
});

And finally, with the depricated new Object() replacement:

var array1 = {};

array1['one'] = {}
array1['one']['data'] = 'some text';
array1['one']['two'] = {};
array1['one']['two']['three'] = {};
array1['one']['two']['three']['data'] = 'some other text';

$.each(array1, function(key1, value1) {
    $.each(value1['two']['three'], function(key1, value1) {
        document.write('test');
    });
});

EDIT: some fun with your array, and why you MIGHT have the strings in the object declaration as you have it:

var array1 = {}; 
var fun="four"; 
array1.one = {}; 
array1.one.data = 'some text'; 
array1.one.two = {}; 
array1.one.two.three = {}; 
array1.one.two.three.data = 'some other text'; 
array1.one.two[fun] = {};
array1.one.two[fun].data=' howdy';

$.each(array1, function(key1, value1) { 
    $.each(value1.two.three, function(key1, value1) { 
        document.write('test'+array1.one.two[fun].data+ ":"+key1+":"+value1); 
    }); 
});

the output the the last is: "test howdy:data:some other text"

Mark Schultheiss
Well, it's not REALLY an array, but fun anyway :) with your array1 object!
Mark Schultheiss
You're having too much fun with this. :)
David Hoerster
I resist posting more "fun" ways to declare this object set :)
Mark Schultheiss