Combining object arrays

Discussion in 'Javascript' started by mike, Sep 14, 2005.

  1. mike

    mike Guest

    If I have 2 object arrays like:

    var txtobj = theform.getElementsByTagName("input");
    var selobj = theform.getElementsByTagName("select");

    and i want to iterate over them I'd like to combine them and then
    iterate over them.

    so I would do something like this below, but that doesn't look right.
    var bothobj = txtobj+selobj;

    for( var i=0; i<bothobj.length; i++ )
    {
    do something....
    }

    Any thought?
     
    mike, Sep 14, 2005
    #1
    1. Advertisements

  2. mike

    Randy Webb Guest

    mike said the following on 9/14/2005 4:37 PM:

    > If I have 2 object arrays like:
    >
    > var txtobj = theform.getElementsByTagName("input");
    > var selobj = theform.getElementsByTagName("select");
    >
    > and i want to iterate over them I'd like to combine them and then
    > iterate over them.
    >
    > so I would do something like this below, but that doesn't look right.
    > var bothobj = txtobj+selobj;
    >
    > for( var i=0; i<bothobj.length; i++ )
    > {
    > do something....
    > }
    >
    > Any thought?


    Test it and see.

    ..concat()

    --
    Randy
    comp.lang.javascript FAQ - http://jibbering.com/faq & newsgroup weekly
     
    Randy Webb, Sep 14, 2005
    #2
    1. Advertisements

  3. mike

    Mick White Guest

    mike wrote:

    > If I have 2 object arrays like:
    >
    > var txtobj = theform.getElementsByTagName("input");
    > var selobj = theform.getElementsByTagName("select");


    Bad!!
    var txtobj = document.theform.getElementsByTagName("input")

    But why not use DOM 0?

    function checkInputsAndSelects(form){
    var f=form.length;
    while(f--){
    if(form[f].type.toLowerCase()=="input"){
    // do stuff with input
    }
    if(form[f].type.toLowerCase()=="select"){
    // do stuff with select
    }
    }
    }

    Mick

    [...]
     
    Mick White, Sep 14, 2005
    #3
  4. mike

    mike Guest

    Mick,

    Why is this bad?

    var txtobj = document.theform.getElementsByTagName("input")

    Is it because you think it only gets <input ..> but not <INPUT ...>

    Mike
     
    mike, Sep 14, 2005
    #4
  5. mike

    Mick White Guest

    mike wrote:

    > Mick,
    >
    > Why is this bad?
    >
    > var txtobj = document.theform.getElementsByTagName("input")
    >
    > Is it because you think it only gets <input ..> but not <INPUT ...>
    >


    var txtobj = theform.getElementsByTagName("input");

    missing "document" reference...

    Will work in IE, though.

    Mick
     
    Mick White, Sep 14, 2005
    #5
  6. mike

    mike Guest

    i had already defined

    var theform = document.update;

    so ... it is ok then ... ?
     
    mike, Sep 15, 2005
    #6
  7. mike

    RobG Guest

    mike wrote:
    > If I have 2 object arrays like:
    >
    > var txtobj = theform.getElementsByTagName("input");
    > var selobj = theform.getElementsByTagName("select");
    >
    > and i want to iterate over them I'd like to combine them and then
    > iterate over them.
    >
    > so I would do something like this below, but that doesn't look right.
    > var bothobj = txtobj+selobj;


    No, it's not right. getElementsByTagName returns an HTML collection,
    not an array. Collections have some array-like properties, e.g. length,
    but have none of an Array's methods.

    >
    > for( var i=0; i<bothobj.length; i++ )
    > {
    > do something....
    > }


    To concatenate collections, you could create a concatenation function
    that adds the elements of a collection to an array[1]:

    function concatCollections() {
    var c, k, j, i = arguments.length;
    var a = [];
    for ( j=0; j<i; j++ ) {
    c = arguments[j];
    h = c.length;
    for ( k=0; k<h; k++ ){
    a.push(c[k]);
    }
    }
    return a;
    }

    And once you've created the collections, call the above function:

    var arrayOfElements = concatCollections(txtobj, selobj);

    But this seems a waste of time. Whatever function that is going to
    iterate over the array could accept multiple arguments and iterate over
    collections instead.

    Unless there are some array methods you'd like to use.

    [1] Push is not supported in very old browsers (it was introduced in
    JavaScript 1.2, works in Netscape 3+ and IE 5+ I think), it's pretty
    simple to create your own push function if required.
    <URL:http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:push>


    --
    Rob
     
    RobG, Sep 15, 2005
    #7
  8. mike

    Mick White Guest

    mike wrote:

    > i had already defined
    >
    > var theform = document.update;
    >
    > so ... it is ok then ... ?
    >

    Your original post:

    <QUOTE>
    If I have 2 object arrays like:

    var txtobj = theform.getElementsByTagName("input");
    var selobj = theform.getElementsByTagName("select");

    [...]
    </QUOTE>

    Missing "document" reference.
    Mick
     
    Mick White, Sep 15, 2005
    #8
  9. mike

    mike Guest

    But this seems a waste of time. Whatever function that is going to
    iterate over the array could accept multiple arguments and iterate over

    collections instead.

    I agree. thanks though for your explanation and collection code.

    Mike
     
    mike, Sep 15, 2005
    #9
  10. mike

    Lee Guest

    mike said:
    >
    >If I have 2 object arrays like:
    >
    >var txtobj = theform.getElementsByTagName("input");
    >var selobj = theform.getElementsByTagName("select");
    >
    >and i want to iterate over them I'd like to combine them and then
    >iterate over them.


    You're probably handling the input's and the select's differently
    anyway, so why bother with pulling them out and concatinating them?

    for (i=0;i<theform.elements.length;i++) {
    if (theform.elements.type=="input") {
    } else if (...) {
    ...
    }
    }
     
    Lee, Sep 15, 2005
    #10
  11. mike

    mike Guest

    This is what I decided to do:

    var theform = document.update;

    var txtobj = theform.getElementsByTagName("input");
    var mod = do_something(txtobj);
    .... something happens with the results of mod

    var selobj = theform.getElementsByTagName("select");
    var mod = do_something(selobj);

    .... something happens with the results of mod

    function do_something(obj)
    {
    for( var i=0; i<obj.length; i++ )
    {
    do something....
    return .....
    }
    }

    Mike
     
    mike, Sep 18, 2005
    #11
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Philipp
    Replies:
    21
    Views:
    1,301
    Philipp
    Jan 20, 2009
  2. combining two arrays

    , Feb 28, 2005, in forum: Perl Misc
    Replies:
    8
    Views:
    166
    Paul Lalli
    Mar 3, 2005
  3. Keith Lee
    Replies:
    8
    Views:
    167
    robic0
    Feb 22, 2006
  4. mike

    combining 2 multi-dim arrays

    mike, Jan 12, 2006, in forum: Javascript
    Replies:
    3
    Views:
    135
  5. Replies:
    1
    Views:
    135
Loading...

Share This Page