Visualizzazione dei risultati da 1 a 6 su 6

Discussione: In_Array function

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    682

    In_Array function

    Ragazzi devo costruirmi una funzione per verificare se un valore é già presente in un array.
    Ho un array global che memorizza degli elementi, e devo aggiungerne uno nuovo se non é un valore duplicato, oppure ritornare false.
    Io ho costruito prima un array globale che richiamo dall'interno della funzione in questo modo:

    var myVector = new Array(0);


    function addItem(val)
    {
    duplicated = false;

    for (i = 0; i < myVector.length; i++) {
    if (myVector[i] == val) {
    //duplicated = true;
    return false;
    }
    }

    myVector[myVector.length] = val;
    return true;
    }

    Praticamente leggo i dati da una select multiple ed eseguo un loop for.
    Dentro questo loop chiamo la funzione addItem(val)
    ...
    for (i = 0; i < cap1.length; i++) {
    if (cap1.options[i].selected) {
    //recupero id e valore letterale
    v = cap1.options[i].value;
    t = cap1.options[i].text;
    //verifico se é un duplicato
    if (addItem(v)) {
    //se true continuo
    }
    }


    Questa funzione la richiamo tramite un pulsante, quindi chiamandola spesso
    oppure cancellando elementi dall'array e ripopolandolo lo script mi va in blocco il browser.
    Sapete se esiste una funzione più ottimizzata per fare questa operazione ?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    una funzione di verifica potrebbe essere così

    Codice PHP:
    function in_array(arrval){
        var 
    "§";
        
    += arr.join("§");
        
    += "§";
        var 
    = (s.indexOf("§"+val+"§") > -1) ? true false;
        return 
    r;

    trasformi l'array in stringa, poi verifichi se nella stringa è presente il valore "val" e restituisci il risultato sotto forma di boolean

    non l'ho provato però

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    682
    Ti ringrazio per la risposta. Siccome il problema é più ampio e difficile da esporre, vorrei sapere
    se conosci uno script dove posso prendere idee per creare delle funzioni in js che mi permettono
    di copiare degli elementi da una select multiple ad un altra e cancellare gli elementi.
    Grazie.

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    mmh, no la mia conoscenza di JS è ancora un tantino acerba

    comunque se ho ben capito, hai bisogno di gestire la copia di "options" da una select ad un'altra, me lo confermi?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    682
    Si esatto. Purtroppo lo script crasha su IE7, mentre su IE6 e firefox va in crash quando svuoto l'array che tiene traccia degli elementi.

  6. #6
    Originariamente inviato da and80
    trasformi l'array in stringa, poi verifichi se nella stringa è presente il valore "val"
    se val è un oggetto non ci fai niente di questa funzione ... convertire a stringa non è mai una soluzione affidabile, pensa solo se una delle stringhe dovesse contenere lo stesso carattere usato da te per il join.

    gli oggetti, inoltre, diventano [object] oppure [object Object], gli elementi diventano HTMLDIVElement o quello che è, insomma non è questa la strada.

    codice:
    Array.prototype.inArray = function(value){
    	for(var	i = 0, found = false; i < this.length && !found; i++)
    		found = this[i] === value;
    	return found;
    };
    
    alert([1,2,3].inArray(3));
    già potrebbe andare meglio.

    P.S. and80, JS è praticamente identico ad AS, quindi se in AS usavi il join su stringa eri un pò fagiano
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.