Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [ARRAY ASSOCIATIVI] come leggere tutti gli elementi ?

    poichè nelle attuali versioni di javascript non esiste foreach come si può leggere tutti gli elementi di un array associativo? esiste pop e shift ma il problema è che restituiscono il valore dell'elemento e non la chiave
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  2. #2
    Per js gli array associativi sono oggetti.

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    mmh grazie per la dritta

    sono giunto ad una pagina che mi suggeriva questo... spero che sia compatibile, ho provato su IE6 quindi credo che peggio non esista

    Codice PHP:
    var ar= new Array();
    ar["a"]= "11";
    ar["b"]= "12";


    for (
    i in ar) {    alert("key="+i+" value="+ar[i]);} 
    funziona alla grande!!! sono 2 righe che valgono oro. strano che nessuna guida ne parli ...

    tanx
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  4. #4
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5
    forte...

    quindi questo for / in è JS1.5 e quindi già da IE6 c'è....

    ma per sicurezza avete idea se esiste una tabella che mostri le versioni di javascript nei vari browser? almeno ci regoliamo



    ps: tanto lo so....mi toccherà implementare il file "normalizzante" di Andr3a...
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  6. #6
    Nel nuovo framework che sto per pubblicare c'è una funzione che potrebbe fare al caso tuo:
    codice:
    Array.prototype.$forEach = function(callback, thisObj) { 
    		var thisObj = thisObj || this,
    			value;
    		
    		if(this.length == 0 && !this.item) {
    			for(var i in this) {
    				if(!this.constructor.prototype[i]) {
    					value = callback.call(thisObj, this[i], i, this) || null;
    					if(value !== null) {
    						if(value === "break") break;
    						if(value === "continue") continue;
    					}
    				}
    			}
    		} else {
    			for(var i = 0, l = this.length; i!=l; i++) {
    				if(i in this) {
    					value = callback.call(thisObj, this[i], i, this) || null;
    					if(value !== null) {
    						if(value === "break") break;
    						if(value === "continue") continue;
    					}
    				}
    			}	
    		}
    	}
    Non serve a normalizzare il forEach anche per IE ( nota che il metodo si chiama $forEach e non forEach ).
    Il vantaggio di questa funzione rispetto all'originale è che funziona anche con array associativi senza dare problemi coi prototipi.
    Attenzione però, se un array associativo contiene anche solo una voce con indice numerico tipo [0] o [1] incasini tutto...

  7. #7
    Originariamente inviato da whisher
    Objects as associative arrays

    for in
    per quanto uno creda di conoscere certe argomentazioni, trovare il tempo di studiare certe letture è sempre veramente illuminante

    grazie.

    quindi:
    - in javascript gli "array misti" in realtà non esistono,
    difatti "length" si riferisce solo all'array con indice numerico, e non a quello associativo.
    - inoltre questo non ha senso:
    Codice PHP:
    var ar= new Array(); 
    praticamente nell'esempio di apertura ho inizializzato inutilmente un array, ma successivamente ho lavorato con un oggetto che ha lo stesso nome, ma che javascript riesce a distinguere caso per caso se mi riferisco all'array o all'oggetto.

    giusto?
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  8. #8
    Originariamente inviato da Mega69
    Nel nuovo framework che sto per pubblicare c'è una funzione che potrebbe fare al caso tuo:
    ...
    massiccia

    bel lavoro


    ma 2 domande:
    - l'else che parte nel caso di array con indice numerico, è proprio necessario? il for/in funziona anche con essi no?
    - l'uso di if/in come funziona? :master:
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  9. #9
    Domanda: l'else che parte nel caso di array con indice numerico, è proprio necessario? il for/in funziona anche con essi no?
    Risposta: In teoria si, in pratica ci sono tre problemi. Il for in "mostra" le proprietà in un ordine arbitrario, ad esempio potrebbe richiamare prima l'elemento 1, poi il 5 e così via. Oltre a ciò c'è il rischio che se l'Array possiede una qualche proprietà questa venga inclusa nel for-in. Infine nel for in ogni chiave viene trattata come stringa, perciò la natura di una chiave potrebbe essere piuttosto ambigua perchè nulla mi vieta di scrivere myArray['0'] = "ciao".
    Viste queste problematiche vale la pena scrivere qualche riga in più piuttosto che arrischiarsi.

    Domanda: l'uso di if/in come funziona
    Risposta: Serve a controllare se l'oggetto possiede una particolare proprietà. E' molto "figo" perchè il controllo restituisce true anche se la proprietà ha valore undefined o null. Questa sua particolarità permette ad esempio di controllare se il browser possiede un particolare stile.

  10. #10
    Originariamente inviato da Mega69
    Domanda: l'else che parte nel caso di array con indice numerico, è proprio necessario? il for/in funziona anche con essi no?
    Risposta: In teoria si, in pratica ci sono tre problemi. Il for in "mostra" le proprietà in un ordine arbitrario, ad esempio potrebbe richiamare prima l'elemento 1, poi il 5 e così via. Oltre a ciò c'è il rischio che se l'Array possiede una qualche proprietà questa venga inclusa nel for-in. Infine nel for in ogni chiave viene trattata come stringa, perciò la natura di una chiave potrebbe essere piuttosto ambigua perchè nulla mi vieta di scrivere myArray['0'] = "ciao".
    Viste queste problematiche vale la pena scrivere qualche riga in più piuttosto che arrischiarsi.
    bene, anche perchè confermi quindi le mie osservazioni, quindi nell'esempio di apertura io ho inizializzato un array, ma poi ho praticamente inserito delle proprietà ad un array che è rimasto vuoto...forte...

    Originariamente inviato da Mega69
    Domanda: l'uso di if/in come funziona
    Risposta: Serve a controllare se l'oggetto possiede una particolare proprietà. E' molto "figo" perchè il controllo restituisce true anche se la proprietà ha valore undefined o null. Questa sua particolarità permette ad esempio di controllare se il browser possiede un particolare stile.
    orgasmico, mi cerco qualche esempio pratico per capire meglio ... ma 'ste cose mi fanno impazzire
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.