Controllo auto già esistente in array Angular JS

di il
8 risposte

Controllo auto già esistente in array Angular JS

Buongiorno,
ho un problema in Angular JS. Ho la seguente homepage con tre relative caselle di testo:
-TARGA
-DATI INTESTATARIO
-MARCA
e sotto una tabella. Quando digito i campi relativi ad una nuova auto, ovviamente, questa viene aggiunta in fondo alla tabella. Devo controllare che l'auto non esiste già quando provo ad aggiungerla (questo, ovviamente, viene effettuato grazie al campo chiave targa). Ho provate queste soluzioni ma nessuna mi funziona

$scope.aggiungi = function () {

if (!$scope.targaauto) {
alert("Errore! Inserire la targa");
}

//1 SOLUZIONE EQUALS
for(let i=0;i<$scope.cars.length;i++){
if($scope.targaauto.equals($scope.cars.targaauto)==='true'){
alert("L'auto esiste già");
}
//2 SOLUZIONE CONVERTIRE IL CAMPO ARRAY IN STRINGA
for(let i=0;i<$scope.cars.length;i++){
let nuovaTargaAuto = $scope.cars.targaauto.toString();
if($scope.targaauto.equals(nuovaTargaAuto)){
alert("L'auto esiste già");
}
//3 SOLUZIONE PROVA CON L'OPERATORE ARITMETICO UGUALE ANZICHE' METODO EQUALS
for(let i=0;i<$scope.cars.length;i++){
if($scope.targaauto===$scope.cars.targaauto) {
alert("L'auto esiste già");
}


$scope.cars.push({
id: $scope.id,
targaauto: $scope.targaauto,
datiintestatario: $scope.datiintestatario,
marca: $scope.marca,
id_bottone: $scope.id_bottone


})
}

8 Risposte

  • Re: Controllo auto già esistente in array Angular JS

    Maurizio93 ha scritto:


    Ho provate queste soluzioni ma nessuna mi funziona [...]
    Ci sono degli errori elementari, quindi sfido che non funziona: prima di utilizzare un linguaggio o un framework, bisogna documentarsi.

    Ad esempio, i dati delle macchine si trovano nell'array $scope.cars, mentre targaauto è solo una delle proprietà del singolo elemento dell'array: ne consegue che per accedere alla targa della i-esima auto non potrai scrivere così:
    $scope.cars.targaauto[i]
    poiché non è "targaauto" l'array, bensì "cars", quindi dovrai scrivere
    $scope.cars[i].targaauto
  • Re: Controllo auto già esistente in array Angular JS

    Hai perfettamente ragione. Seguirò il tuo consiglio. Ho modificato la funzione

    $scope.aggiungi = function () {

    if (!$scope.targaauto) {
    alert("Errore! Inserire la targa");


    for (let i=0;i<$scope.cars.length;i++){
    $scope.risultato = angular.equals($scope.targaauto, $scope.cars.targaauto);
    if ($scope.risultato.equals("true")){
    alert("Errore! L'auto è stata già inserita");
    }


    }
    } else {
    $scope.cars.push({
    id: $scope.id,
    targaauto: $scope.targaauto,
    datiintestatario: $scope.datiintestatario,
    marca: $scope.marca,
    id_bottone: $scope.id_bottone
    })
    }

    $scope.id = " ";
    $scope.targaauto = " ";
    $scope.datiintestatario = " ";
    $scope.marca = " ";

    };

    Funziona. Però se inserisco una targa già presente nella tabella l'aggiunge comunque e non visualizza alert
  • Re: Controllo auto già esistente in array Angular JS

    Maurizio93 ha scritto:


    Funziona. Però se inserisco una targa già presente nella tabella l'aggiunge comunque e non visualizza alert
    Prendi il codice che hai riportato, formattalo correttamente (adeguandolo ai blocchi creati con le parentesi graffe {}), rileggilo riga per riga e a voce alta dichiara qual è l'istruzione che viene eseguita: noterai subito qual è l'errore.

    Se non lo noti, direi che devi fare un passo indietro, perché la sintassi di base intesa come corretto uso dei blocchi di codice e delle condizioni degli if() è fondamentale per poter sviluppare applicazioni, anche quelle più semplici.

    Inoltre, usa l'apposito tasto dell'editor del forum per racchiudere le porzioni di codice, altrimenti non è leggibile e tocca fare copia/incolla ogni volta per capirci qualcosa (e magari così l'errore apparirà subito chiaro anche a te).

    Ciao!
  • Re: Controllo auto già esistente in array Angular JS

    
    $scope.aggiungi = function () {
    
    	if (!$scope.targaauto) {
    		alert("Errore! Inserire la targa");
    	
    		/*METODI PROVATI PER CONFRONTARE SE LA TARGA INSERITA
    		  NELLA CASELLA DI TESTO NON ESISTE GIA'---OVVIAMENTE
    		  CIASCUN METODO E' STATO PROVATO SINGOLARMENTE
    		  ALL'INTERNO DEL FOR--NESSUNO FUNZIONA*/
    
    		for (var i=0;i<$scope.cars.length;i++){
    			
    			//1 METODO
    			if ($scope.targaauto === $scope.cars[i].targaauto) {
    				alert("Errore! L'auto è stata già inserita");
    			}
    
    			//2 METODO
    			if(angular.equals($scope.targaauto, $scope.cars[i].targaauto)){
    				alert("Errore! L'auto è stata già inserita");
    			}
    
    			//3 METODO
    			let risultato = $scope.targaauto.localeCompare($scope.cars[i].targaauto);
    				if(risultato==0){
    				alert("Errore! L'auto è stata già inserita");
    			}
    
    			//4 METODO -- CONVERSIONE DELLA STRINGA IN ARRAY
    			let array = $scope.targaauto.split(',');
    				if(angular.equals(array, $scope.cars[i].targaauto)){
    				alert("Errore! L'auto è stata già inserita");	
    			}
    			
    			//5 METODO -- CONVERSIONE DELL'ARRAY IN STRINGA
    			let stringa = $scope.cars.targaauto.join(',');
    				if(angular.equals($scope.targaauto, stringa)){
    				alert("Errore! L'auto è stata già inserita");
    			
    			}
    	 	}
    	}	
    
  • Re: Controllo auto già esistente in array Angular JS

    Scusa, ma il tuo codice ha praticamente questa struttura:
    
    if (!$scope.targaauto) {
    
            alert("Errore! Inserire la targa");
    
            /*METODI PROVATI PER CONFRONTARE SE LA TARGA INSERITA
            NELLA CASELLA DI TESTO NON ESISTE GIA'---OVVIAMENTE
            CIASCUN METODO E' STATO PROVATO SINGOLARMENTE
            ALL'INTERNO DEL FOR--NESSUNO FUNZIONA*/
    
            // ...
    }
    
    Davvero non ti è chiaro qual è il problema qui?
  • Re: Controllo auto già esistente in array Angular JS

    Sinceramente no
  • Re: Controllo auto già esistente in array Angular JS

    Maurizio93 ha scritto:


    Sinceramente no
    E' presente la condizione if (!$scope.targaauto), che verifica il caso in cui la targa non sia stata inserita.

    Se la targa non è stata specificata, all'interno del blocco di istruzioni che segue associato al verificarsi di questa condizione, viene mostrato dapprima il messaggio di errore (tramite alert("Errore! Inserire la targa");) per segnalare il problema all'utente, e poi è presente TUTTO il codice che verifica l'esistenza della targa (che non è stata specificata) fra quelle già esistenti... ma il codice che controlla la presenza della targa dovrebbe essere eseguito quando questa viene effettivamente inserita, e non quando viene omessa!

    In pratica, stai controllando la presenza della targa nel ramo di codice dove gestisci il fatto che non sia stata inserita, quindi la tua logica non verrà MAI eseguita; verrà eseguita invece se non metti la targa, ma ovviamente questo non ha senso ed è sbagliato.

    Saper leggere un pezzo di codice JavaScript qualsiasi direi che è la base per poter programmare con questo linguaggio.
  • Re: Controllo auto già esistente in array Angular JS

    Ho risolto
    Grazie
Devi accedere o registrarti per scrivere nel forum
8 risposte