Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    Ricerca di un valore in un array

    Ciao, come da titolo, devo cercare un valore in un array per evitare di salvare valori doppi e quindi creare un datalist.
    La ricerca negli array l'ho realizzata grazie ad un metodo creato e postato sul suo sito da un amico:
    [
    codice:
    //	Aggiunge il metodo contains all'elemento Array del Javascript, per verificare se una voce è presente nell'array
    				if(typeof Array.prototype.contains !== 'function') {
    					Array.prototype.contains = function ( needle ) {
    						for (i in this) {
    							if (this[i] == needle) {
    								return true;
    							}
    						}
    						return false;
    					}
    
    
    				}
    l'utilizzo è semplice, prendi un array e mediante il metodo contains verifica se una data parola è presente nell'array. Es.: mio_array.contains('pippo');
    Detto questo nell'array contenente nomi di città già cercati devo inserire un nuovo nome inserito da un utente, sempre che questo non sia già nell'array.
    Semplice, ma c'è un problema, ovvero la ricerca all'interno dell'array da parte di contains non prevede nessun controllo sulla forma della stringa, così che "Udine" viene data per esistente anche se all'interno dell'aarry c'è solo "Moggio udinese" che contiene nel nome la parola udine.
    Ora per semplicità mi basterebbe modificare il metodo che ho postato sopra che così com'è è semplice e veloce.
    Forse usando l'operatore test per verificare, parola per parola contenuta nell'array se determina l'esistenza o meno della stringa cercata.
    Voi che suggerimenti mi dareste?

  2. #2
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Ho anche pensato di eliminare i valori non unici una volta sommati all'array, ma se "Udine" è uguale a "Moggio Udinese" rischio di mandare in confusone la macchina, oppure no?
    ho provato questo:
    codice:
    let arrayUnique = function(arr) {    return arr.filter(function(value, index, self) {        return self.indexOf(value) === index;    });};
    Ma non funziona affatto.

    EDIT!
    Che bugiardo che sono funziona eccome.
    Ultima modifica di Marcolino's; 27-04-2018 a 14:07

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Allora, sembra che abbia risolto.
    Per la cronaca di chi legge ora, il primo metodo, una prototipizzazione del metodo javascript Array, aggiunge il metodo contains che confronta i valori e dice se un valore è presente in un array.
    Purtroppo non confronta anche se una parola o frase è contenuta in un altra, così che Udine e moggio Udinese, per lui sono uguali.

    Il secondo metodo che per me ha funzionato perfettamente, è un modo diverso di affrontare il problema, in pratica invece di confrontare se la parola è già presente e quindi non aggiungerla all'array; prima l'aggiungo e poi tolgo ciò che è ripetuto, funziona per me e credo anche per chi deve verificare se uno o più valori sono presenti in un array.

    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Io avrei usato la funzione match() passando una regexp con le anchor per inizio e fine stringa (utilizzando il tuo esempio cercherei ^Udine$), così da evitare problemi con i contenuti che contengono il nome, ti elimini un passaggio e rendi il tutto più veloce.

    p.s. occhio a gestire le maiuscole, Moggio udinese e Moggio Udinese sono diversi, quindi dovresti pensare ad un metodo per gestire questi casi.
    Ultima modifica di M4V1; 28-04-2018 a 11:54

  5. #5
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Quote Originariamente inviata da M4V1 Visualizza il messaggio
    Io avrei usato la funzione match() passando una regexp con le anchor per inizio e fine stringa (utilizzando il tuo esempio cercherei ^Udine$), così da evitare problemi con i contenuti che contengono il nome, ti elimini un passaggio e rendi il tutto più veloce.

    p.s. occhio a gestire le maiuscole, Moggio udinese e Moggio Udinese sono diversi, quindi dovresti pensare ad un metodo per gestire questi casi.
    Ho controllato e funziona comunque scriva il nome, inoltre mi sono evitato di scrivere una regex, l'avevo pensato per il primo metodo ma poi ho deciso di desistere.

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