Foreach in JavaScript: gestire gli array associativi

2007-07-09 | Tags: , , ,

Oggi ho avuto l’esigenza di implementare un sistema asincrono su di un sito.

Il trasferimento dei dati lo gestisco con JSON, che rende il passaggio dei dati snello e di facile manipolazione.

Fino a quando gestivo i dati in PHP, utilizzare gli array associativi era molto semplice. Ma ad un certo punto ho avuto l’esigenza di creare del codice JavaScript per compilare delle list-box in tempo reale.

Proprio a questo punto mi sono reso conto di non saper come recuperare i dati da un array associativo con un ciclo (in JavaScript, ndr.).

Un array associativo è un array di questo tipo:

L’utilità nell’utilizzare un array associativo è dato dal fatto che, nel caso specifico, posso selezionare tutti i valori relativi ad una determinata marca, senza dover sapere in quale posizione dell’array è presente il dato.

In JavaScript lo stessa variabile la si potrebbe creare in questo modo:

Per elencare in maniera ciclica tutti i dati occorre fare ricorso ad una struttura logica conosciuta come Foreach. Volendola applicare in PHP avremmo un codice simile al seguente:

Anche in JavaScript esiste una struttura logica che esegue questa funzione, ma non si chiama Foreach. Mostro direttamente il codice così da essere subito chiaro:

In effetti è sempre il solito for, ma con una condizione differente che permette di analizzare un array associativo.

Attenzione a scrivere la condizione. L’array è il secondo elemento e va messo dopo la particella in. La prima variabile è quella che conterrà il valore dell’indice.

  1. L.M. Hackivara
    12 ottobre 2007 alle 16:14

    Ottimo! Mi complimento con l’autore perchè ha spiegato in maniera semplice e coincisa questo sistema.

    Mi permetto di sottolineare (a tutti quelli che hanno sbagliato come me)
    che array_associativo = new Object() e non new Array()

    perchè se noi utilizzassimo un Array al posto di un Object avremo ulteriori KEYS oltre a quelle che ci interessano, che sono:

    each
    eachSlice
    all
    any
    collect
    detect
    findAll
    grep

    ecc, ecc. che sicuramente ci scombussolerebbero i risultati previsti.

  2. 12 ottobre 2007 alle 17:35

    Ottima precisazione!

  3. Marino Bonetti
    16 febbraio 2009 alle 09:47

    Utile, mi serviva per leggere un array associativo proveniente da json_encode di php
    Potrei far notare che il codice dell’array in php riportato qui sopra è errato?!?!:

    $array_associativo = array (
    ‘Fiat’=>500,
    ‘Fiat’ => 600,
    ‘Fiat’=>’Punto’,
    ‘Fiat’=>’Bravo’,
    ‘Alfaromeo’=>’156′,
    ‘Alfaromeo’ => ‘157 ‘,
    ‘Alfaromeo’=>’159′,
    ‘Mercedes’ => ‘C180′
    );

    Voglio far notare che tale codice se lo si fà eseguire non darà il risultato voluto, riporto il mio codice di testing perchè mi sembrava strano ma prima di scrivere ho voluto fare una prova:

    $array_associativo = array (
    ‘Fiat’=>500,
    ‘Fiat’ => 600,
    ‘Fiat’=>’Punto’,
    ‘Fiat’=>’Bravo’,
    ‘Alfaromeo’=>’156′,
    ‘Alfaromeo’ => ‘157 ‘,
    ‘Alfaromeo’=>’159′,
    ‘Mercedes’ => ‘C180′
    );

    echo “”;
    echo var_dump($array_associativo);
    echo “”;

    e il risultato è:

    array(3) {
    ["Fiat"]=>
    string(5) “Bravo”
    ["Alfaromeo"]=>
    string(3) “159″
    ["Mercedes"]=>
    string(4) “C180″
    }

    Spiegazione:
    Non si può avere lo stesso indice per due valori differenti nello stesso array, conseguentemente php sovrascrive i valori precedenti dello stesso indice con l’ultimo inserito.

    PS:
    Le virgolette in alcuni lavori erano sbagliate: ′ => ‘

  4. 16 febbraio 2009 alle 10:16

    @Marino Bonetti
    Ciao, ottime precisazioni.
    Per quanto riguarda le virgolette, comunque, è colpa del sistema di correzione dei caratteri di Wordpress, comunque è utile che si sappia, altrimenti chi è meno smaliziato, si troverebbe in serie difficoltà.

    Per quanto riguarda la struttura dell’array, beh li ho preso una bella “cantonata”. Il modo migliore per rappresentarlo era:

    $array_associativo = array (

    ‘Fiat’ => array (

    500,
    600,
    ‘Punto’,
    ‘Bravo’
    ),
    ‘Alfaromeo’ => array (

    156,
    157,
    159

    ),
    ‘Mercedes’ => ‘C180′’

    );

    ;)

  5. Marino Bonetti
    16 febbraio 2009 alle 15:16

    Già…ma sarebbe stato un pò fuorviante far vedere array di array…ho voluto far notare la cosa perchè mi ha fatto venire per un momento anche a me il dubbio di aver sbagliato a fare gli array negli ultimi anni….infatti per non sbagliare ho anche fatto un test.
    E’ stato un piacere essere d’aiuto.
    PS.
    Mi serviva proprio l’esempio del js Ottima spiegazione.

  6. 10 ottobre 2009 alle 22:33

    l’esempio funziona anke dando come oggetto new Array(); alla variabile array_associativo

  7. 1 trackbacks
    1. 2007-07-09 - diggita.it