Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Confronto tra array

  1. #1

    Confronto tra array

    Salve gente,

    mi servirebbe una funzione capace di confrontare gli elementi di due array (che differiscono di un solo elemento) che mi restituisca l'elemento differente.

    Ho provato con cicli for, for...in, in_array. Ma non riesco ad ottenere nulla di buono.

    quindi ricapitolando avrei ad esempio:

    Codice PHP:

    var ar1= [23,45,74];
    var 
    ar2= [32,45,74];

    var 
    nuovoelemento confronta(ar1,ar2);

    alert(nuovoelemento);

    //output 32 

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Sviluppa tu l'idea nella forma che piu' ti si addice:
    codice:
    var ar1= [23,45,74]; 
    var ar2= [32,45,74]; 
    
    for (var i=0;i<ar2.length;i++) {
      rv = false;
      for (var j=0;j<ar1.length;j++) {
        rv = rv || ar2[i]==ar1[j];
      }
      if(!rv) alert(ar2[i]) 
    }
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Può essere problematico a seconda di quel che davvero intendi ottenere. Parlare di una differenza fra le array è facile, ma non sappiamo da quel che dici se ti interessa questa differenza in assoluto o se, adesso od in un secondo momento, ti interessa non solo sapere quali elementi sono diversi, ma in QUALE array ricorrono questi elementi diversi.

    Guarda te se fa al tuo caso questa funzione:
    Javascript Compare Arrays Find Difference Or Shared Items

    Se la usi, nell' esempio specifico che porti si applicherebbe così:

    codice:
    var ar1= [23,45,74]; 
    var ar2= [32,45,74]; 
    
    var different=compareArrays(ar1, ar2, 1);
    alert(different[1]);

  4. #4
    Ringrazio br1 per la risposta, avevo già provato una soluzione simile, il problema è che in situazioni un pò più complicate, proprio come ha cprrettamente interpretato TrueLies, la soluzione precedente non basta.

    ecco cosa dovrei fare:

    - un cliente effettua delle scelte da una lista di select
    - recupero attraverso jQuery i value e li inserisco in un array
    - confronto questa selezione con un selezione di default o con la selezione precedente salvata tramite cookie
    - all'onchange cerco di ottenere l'unico elemento che è cambiato dopo la selezione

    quindi se prima avevo nd,nd,nd e il cliente seleziona l'id 32 nella seconda select, dovrò confrontare gli array nd,nd,nd e nd,32,nd e così via....

  5. #5
    allora devi salvare tutte le selezioni (e deselezioni...) precedenti. Diciamo le salvi in uno stack (=array) chiamato foo.

    Ad ogni nuova selezione:
    var x=foo.indexOf(nuovoValoreSelezionato);

    if(x<0){
    /*elemento mai selezionato prima.
    Aggiungilo allo stack di foo */
    }
    else{
    /*l'elemento risulta già selezionato in precedenza*/
    }

    Potrebbe anche essere più semplice di così, poichè ti basterebbe controllare l'ultimo elemento impliato su foo.
    Il fatto è che anche dalle spiegazioni che fornisci non è ben chiaro come si sviluppa l'applicativo. Quello che accade è chiaro (selezione di un valore nuovo) - ma non è chiaro poi cosa dovrebbe succedere ai valori salvati nei casi:
    1) il valore non è MAI stato selezionato prima
    2) il valore è già stato selezionato in precedenza (lo aggiungo lo stesso a foo? O lo cancello da foo? Il fatto che sia "nuovo" in quanto RIselezionato, ma NON nuovo in assoluto poichè già selezionato in precedenza, come lo configura per l'applicativo: come nuovo o come vecchio?)

    la applicazione in sè non presenta grossi problemi in nessun caso, è che devi prima chiarire (non solo a noi, ma anche a te stesso: le interazioni degli utenti potrebbero non essere ovvie...) come questa applicazione tratterà questi dati.

    Può darsi anche che, in realtà, ti interessi solo la semplice differenza: non è possibile dire, su quanto scrivi, se si tratta magari di un problema inutilmente complessificato o invece correttamente messo a fuoco.

  6. #6
    Ecco la porzione di codice interessata

    qui ho le select all'interno di un form
    Codice PHP:
    <select  class="group_5" id="group_5" name="group_5">
    <
    option title="nd" value="nd" > - Seleziona - </option>
    <
    option title="valore1" value="28" >valore1</option>
    <
    option title="valore2" value="29" >valore2</option>
    <
    option title="valore3" value="30">valore3</option>
    <
    option title="valore4" value="31"">valore4</option>
    </select>
    <select  class="
    group_6" id="group_6" name="group_6">
    <option title="
    nd" value="nd" > - Seleziona - </option>
    <option title="
    valore1" value="43" >valore1</option>
    <option title="
    valore2" value="55" >valore2</option>
    <option title="
    valore3" value="76">valore3</option>
    <option title="
    valore4" value="122"">valore4</option>
    <
    option title="valore5" value="122"">valore5</option>
    </select>
    <select  class="
    group_9" id="group_9" name="group_9">
    <option title="
    nd" value="nd" > - Seleziona - </option>
    <option title="
    valore1" value="323" >valore1</option>
    <option title="
    valore2" value="31" >valore2</option>
    <option title="
    valore3" value="12">valore3</option>
    <option title="
    valore4" value="88"">valore4</option>
    <
    option title="valore5" value="43"">valore5</option>
    </select> 
    qui ho la parte relativa a javascript/jQuery
    Codice PHP:

    <script type="text/javascript">
    // <![CDATA[
      
    $("#attributes").change(function () {
            
              
              var 
    cookie = $.cookie("sceltaprec");
              
              if(
    cookie=='ns')
              {
               var 
    prescelta = new Array();
              $(
    'div#attributes select').each(function(){
                
    prescelta.push('nd');
                });

              }
              else
              {
                  
    prescelta cookie;
              }
             

              var 
    scelta = new Array();
              $(
    'div#attributes select').each(function(){
                
    scelta.push($(this).val());
                });
                       
            
            var 
    newsel //ultima opzione selezionata dall'utente
                       
                           
              

            
    $.cookie("sceltaprec",scelta);
             
             
            });

    //]]>        
    </script> 

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 © 2026 vBulletin Solutions, Inc. All rights reserved.