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

    jquery array, parentesi

    Ciao a tutti.

    Ho bisogno di una vostra spiegazione per capire come lavorano i vari array in JS. Mi sono trovato con un codice simile al seguente:

    codice:
    $.Valori = {
    primo:{
    'a':'lettera A',
    'b': 'lettera B',
    'c':'lettera C'
    }
    secondo:{
    a:    [ '1a', '1b','1c' ],
    b:    [ '2a', '2b','2c' ],
    c:    [ '3a', '3b','3c' ]
    }
    
    var lettere = ["a","b","c"];
    Generando un for come il seguente, non riesco ad accedere ai valori singoli della variabile secondo, quindi ad ottenere 1a, oppure 2b ecc.
    codice:
    for (var i in lettere) {
    var let= $.Valori.secondo[lettere[i]]
    alert ( let[0]);
    }

    Grazie

  2. #2
    Il codice va bene, l'oggetto $.Valori è non è ben definito sintatticamente.
    Questo codice, ad esempio, funzione come dici tu:

    Codice PHP:
    <html>
        <
    script>
            var $ = {};
            $.
    Valori = {
                
    primo:{
                
    'a':'lettera A',
                
    'b''lettera B',
                
    'c':'lettera C'
                
    },
                
    secondo:{
                
    a:    [ '1a''1b','1c' ],
                
    b:    [ '2a''2b','2c' ],
                
    c:    [ '3a''3b','3c' ]
                }
            };

            var 
    lettere = ["a","b","c"];
            
            for (var 
    i in lettere) {
                var 
    let= $.Valori.secondo[lettere[i]]
                
    alert let[0]);
            }
        
    </script>
        
        <body>
        
        </body>
    </html> 
    Io personalmente avrei fatto così il ciclo, mi pare un pò più chiaro:

    Codice PHP:
    for(var 0len lettere.lengthleni++) {
        var 
    let= $.Valori.secondo[lettere[i]]
        
    alert let[0]);


    In javascript puoi vedere un oggetto come un array associativo e possono essere creati "dal nulla" con la notazione JSON {x_1 : valore_1 [, x_i : valore_i]} dove i vari x_i sono degli identificativi e i valore_i sono oggetti (interi, float, object, array...).
    Inoltre nota che gli array sono object dove, se usati come array, le chiavi sono degli interi (per questo il tuo ciclo for-in funziona).

  3. #3
    Ti ringrazio.

    Io però ho specificato si trattava di Jquery.

    Non penso possa definire la variabile $ in quando il tutto è all'interno di una funzione:
    codice:
    (function($) {
    
      $.Valori = {
    primo:{
    'a':'lettera A',
    'b': 'lettera B',
    'c':'lettera C'
    }
    secondo:{
    a:    [ '1a', '1b','1c' ],
    b:    [ '2a', '2b','2c' ],
    c:    [ '3a', '3b','3c' ]
    }
    $.fn.extend({
        forletter: function(settings) {
         this.defaults = {
           lettere = ["a","b","c"]
         }
         var settings = $.extend(this.defaults, settings);
         var lettere= settings.lettere;
         for (var i in lettere) {
          var let= $.Valori.secondo[lettere[i]];
          alert ( let[0]);
         }
       }
     });
    Probabilmente è perchè non riesco ad accedere a Textile con degli indici numerici:

    $.Valori.secondo[1] che dovrebbe ottenere come valore b: [ '2a', '2b','2c' ], in realtà risulta undefined mentre se provo con $.Valori.secondo['b'] ottendo il corretto valore.

  4. #4
    Allo stesso modo, se accedo con $.Valori.secondo.b ottendo il risultato ma se accedo con $.Valori.secondo.tags[i] mi ritrovo con un undefined.

    Quindi probabilmente sbaglio ad accedere.

  5. #5
    Originariamente inviato da Kreatore
    Ti ringrazio.

    Io però ho specificato si trattava di Jquery.

    Non penso possa definire la variabile $ in quando il tutto è all'interno di una funzione:
    Non importa se parliamo di jquery, mootools o qualche altra libreria dato che il punto è come accedere ad un object. Ho definito $ a oggetto vuoto per semplicità. Inoltre, se dai uno sguardo più attento, stiamo utilizzando la proprietà "Valori" di $, quindi possiamo anche disinteressarci di $ in se per se. Nel nostro primo esempio non faceva differenza se esso era object o function.

    codice:
    (function($) {
    
      $.Valori = {
    primo:{
    'a':'lettera A',
    'b': 'lettera B',
    'c':'lettera C'
    }
    secondo:{
    a:    [ '1a', '1b','1c' ],
    b:    [ '2a', '2b','2c' ],
    c:    [ '3a', '3b','3c' ]
    }
    $.fn.extend({
        forletter: function(settings) {
         this.defaults = {
           lettere = ["a","b","c"]
         }
         var settings = $.extend(this.defaults, settings);
         var lettere= settings.lettere;
         for (var i in lettere) {
          var let= $.Valori.secondo[lettere[i]];
          alert ( let[0]);
         }
       }
     });
    Probabilmente è perchè non riesco ad accedere a Textile con degli indici numerici:

    $.Valori.secondo[1] che dovrebbe ottenere come valore b: [ '2a', '2b','2c' ], in realtà risulta undefined mentre se provo con $.Valori.secondo['b'] ottendo il corretto valore.
    $.Valori.secondo è un object. Come dicevo nel primo post puoi vederlo come un array associativo. Il set delle chiavi di "secondo" è {a, b, c}. il valore "1" non fa parte delle chiavi della mappa quindi il valore associato a "1" è undefined. L'accesso agli array associativi in generale non è posizionale ma per chiave.

    Codice PHP:
    var = { "ciao""b" "hello""salut" };

    console.log(x[1]); // salut
    console.log(x[0]); // undefined 
    Allo stesso modo, se accedo con $.Valori.secondo.b ottendo il risultato ma se accedo con $.Valori.secondo.tags[i] mi ritrovo con un undefined.

    Quindi probabilmente sbaglio ad accedere.
    $.Valori.secondo.b e $.Valori.secondo["b"] sono equivalenti quindi ottieni lo stesso comportamento che hai descritto più su.

    Ricapitolando, se ho un oggetto fatto così
    Codice PHP:
    $.Valori = {
        
    primo:{
            
    'a':'lettera A',
            
    'b''lettera B',
            
    'c':'lettera C'
        
    },
        
    secondo:{
            
    a:    [ '1a''1b','1c' ],
            
    b:    [ '2a''2b','2c' ],
            
    c:    [ '3a''3b','3c' ]
        }
    }; 
    e voglio ottenere il valore "2b", faccio

    Codice PHP:
    $.Valori.secondo.b[1
    che, seguendo gli accessi step by step, vuol dire

    codice:
    $ - faccio riferimento all'object "4"
    $.Valori - faccio riferimento alla proprietà "Valori" di "$", che è un object
    $.Valori.secondo - faccio riferimento alla proprietà "secondo" di "$.Valori", che è un object
    $.Valori.secondo.b - faccio riferimento alla proprietà "b" di "$.Valori.secondo", che è un array
    $.Valori.secondo.b[1] - accedo all'indice 1 dell'array "$.Valori.secondo.b[1]"

  6. #6
    Ok, grazie. Adesso mi è chiaro il comportamento degli array. Però seguendo questo ragionamento dovrei ottenere un risultato, invece ottengo un errore:

    Codice PHP:
    (function($) {

      $.
    Valori = {
    primo:{
    'a':'lettera A',
    'b''lettera B',
    'c':'lettera C'
    }
    secondo:{
    a:    [ '1a''1b','1c' ],
    b:    [ '2a''2b','2c' ],
    c:    [ '3a''3b','3c' ]
    }
    $.
    fn.extend({
        
    forletter: function(settings) {
         
    this.defaults = {
           
    lettere = ["a","b","c"]
         }
         var 
    settings = $.extend(this.defaultssettings);
         var 
    letteresettings.lettere;
         for(var 
    0len lettere.lengthleni++) {
           var 
    let= $.Valori.secondo[lettere[i]]
           
    alert let[0]);
        }
       }
     }); 
    Mi restituisce un errore in console indicando che let è indefinito

  7. #7
    Non riesco bene a capire cosa tu voglia fare quindi posto questo esempio cercando di "indovinare" il tuo obiettivo. Il codice da te postato contiene molti errori sintattici, forse perchè è solo a titolo di esempio. Comunque, l'ho corretto e quello che mi viene fuori è questo:

    codice:
    <html>
    	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    	<script>
    		(function($) { 
    
    			$.Valori = { 
    				primo:{ 
    					'a':'lettera A', 
    					'b': 'lettera B', 
    					'c':'lettera C' 
    				}, 
    				secondo:{ 
    					a:    [ '1a', '1b','1c' ], 
    					b:    [ '2a', '2b','2c' ], 
    					c:    [ '3a', '3b','3c' ] 
    				}
    			};
    			
    			$.fn.extend({ 
    				forletter: function(settings) { 
    				 var defaults = { 
    				   lettere : ["a","b","c"] 
    				 } 
    				 var settings = $.extend(defaults, settings); 
    				 var lettere= settings.lettere; 
    				 for(var i = 0, len = lettere.length; i < len; i++) { 
    				   var let= $.Valori.secondo[lettere[i]];
    				   alert ( let[0]); 
    				 } 
    			   } 
    			});
    		}(jQuery));
    		
    		$({}).forletter({ lettere : ["a", "c"] });
    	</script>
    </html>
    Richiamo il plugin forletter su un oggetto a caso (nel plugin non viene usato, quindi uno vale l'altro) passandogli delle opzioni, quindi gli accessi fatti col for sono:

    codice:
    $.Valori.secondo["a"][0] => "1a"
    $.Valori.secondo["c"][0] => "3a"

  8. #8
    Grazie.

    In realtà ci ero arrivato, solo che continuavo ad ottenere errore poichè richiedevo una lettera non presente di $.Valore

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.