On 1/26/07, Johnny Blonde <[EMAIL PROTECTED]> wrote:
>
> Hello Arnar,
>
> maybe i need to explain it more detailed.
>
>
> var rData=  [
>         {
>                 "VORGANG":"XX1234",
>                 "NR":"572",
>                 "NAME1":"Frank",
>                 "NAME2":"S",
>                 "REISENR":"12345"
>         },
>         {
>                 "VORGANG":"XX12344",
>                 "NR":"1111",
>                 "NAME1":"Frank",
>                 "NAME2":"L",
>                 "REISENR":"12345"
>         },
>         {
>                 "VORGANG":"XX12345",
>                 "NR":"1264",
>                 "NAME1":"Frank",
>                 "NAME2":"L",
>                 "REISENR":"12345"
>         }
> ] ;
>
>
> and i need it to be transformed to a html-table like
>
> vorgang     nr     name1     name2     reisenr
> XX1234     572   Frank       S             12345
> XX12344   1111 Frank       L              12345
> XX12345   1264 Frank       L              12345
>
>
> what i do right now is
>
> var gotData = function(rData) {
>   row_display = function (row) {
>     return TR(null, map(partial(TD, null), row));
>   }
>   var dataArr = new Array();
>   forEach(rData, function(rRow) {
>     dataArr.push(values(rRow));
>   });
>   var newTable = TABLE({'id': 'myDataTable'},
>     THEAD(null,
>       row_display(keys(rData[0]))),
>     TBODY(null,
>       map(row_display, dataArr)));
>   appendChildNodes('myDisplay', newTable);
> }
>
> d = MochiKit.Async.loadJSONDoc("mydemodata.json");
> d.addCallback(gotData);
>
>
>
> My main question is: isn“t there a more elegant, smooth and flexible
> way to transform an object-array to an array than
>
> var dataArr = new Array();
>   forEach(rData, function(rRow) {
>     dataArr.push(values(rRow));
>   });

Yes there is: var dataArr = map(values, rData);

> or even better: can someone give me a hint on how to do the things in
> the example on an object instead of first converting it to this array?

Oh, ok - I understand.

Well, I would probably do something like this:

var gotData = function(rData) {
    var columns = ['VORGANG', 'NR', 'NAME1', 'NAME2', 'REISENR'];
    // or, if you'd like to do it dynamically:
    // var columns = keys(rData[0]);
    var mkTD = partial(TD, null);
    var newTable = TABLE({'id': 'myDataTable'},
        THEAD(null, TR(null, map(mkTD, columns))),
        TBODY(null, map(function (row) {
            return TR(null, map(function (key) {
                return mkTD(row[key]);
            }, row));
        }, rData))
     );
    appendChildNodes('myDisplay', newTable);
}

d = MochiKit.Async.loadJSONDoc("mydemodata.json");
d.addCallback(gotData);


Don't know if it's more elegant or not though :o)

Even simpler if you feel comfortable relying on the correct order of
things in your input and the browser's semantics of "for a in obj":

var gotData = function(rData) {
    var mkTD = partial(TD, null);
    var newTable = TABLE({'id': 'myDataTable'},
        THEAD(null, TR(null, map(mkTD, keys(rData[0])))),
        TBODY(null, map(function (row) {
            return TR(null, map(mkTD, values(row));
        }, rData))
     );
    appendChildNodes('myDisplay', newTable);
}

Those weirdos (me included) that find some beauty in functional
programming would enjoy this:

var gotData = function(rData) {
    /* look ma, no variables or function definitions! */
    appendChildNodes('myDisplay', TABLE({'id': 'myDataTable'},
        THEAD(null, TR(null, map(partial(TD, null), keys(rData[0])))),
        TBODY(null,
            map(partial(TR, null),
                map(partial(map, partial(TD, null)),
                    imap(values, rData)
                )
            )
        )
    );
}

:o)

Arnar

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"MochiKit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/mochikit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to