2014-09-04 10 views
21

il mio codice è simile a questo:come evitare duplicati in ordine di spinta in angularjs

var arr = []; 
arr.push(item1,item2); 

così arr conterrà come: [ "nome", "thing1"]

ma ho avuto problema quando spingendo l'elemento con lo stesso valore esatto, come faccio a filtrare lo stesso valore dell'elemento ma ancora accettando aggiornamenti/modifiche. JSFIDDLE

+0

È possibile utilizzare 'grep' di jQuery. [Vedere questo] (http://stackoverflow.com/a/7364307/4365626) –

risposta

7

Solo javascript è sufficiente.

Se un array contiene la voce il suo indice è> = 0

in modo da poter fare questo, se index == -1, voce non esiste nella matrice, in modo da poter spingere pezzo unico

if(arr.indexOf(item) == -1) { 
    arr.push(item); 
} 

Edit: Avete chiesto la modifica del numero, questo è il modo in

var index = arr.indexOf(item); 
if(index > -1) { //checking if item exist in array 
    arr[index]++; // you can access that element by using arr[index], 
       // then change it as you want, I'm just incrementing in above example 
} 
+0

ho provato a utilizzare questo, ma non funziona. E voglio ancora aggiornare il numero in array, basta non spingere l'intero elemento alla fine dell'array –

+0

controllare l'esempio modificato – Vamsi

41

È possibile utilizzare arr.indexOf che restituisce -1 se non viene trovato, quindi è possibile aggiungerlo allora.

ad es.

if (arr.indexOf(item) == -1) { 
    arr.push(item); 
} 

Tuttavia, questo non funziona in vecchi browser ...

JQuery ha un metodo ($.indexOf) che funziona in tutti i browser, anche molto vecchi.

+0

funziona alla grande ... grazie! –

2

Come la maggior parte delle risposte ha evidenziato, è possibile utilizzare il metodo Array.prototype.indexOf() per determinare se esiste o meno un valore. Per verificare ciò, controllare la matrice di stringhe rispetto alla proprietà del valore ng-models, selects.value, all'interno della chiamata all'evento ng-change().

DEMO

Javascript

$scope.goChange = function(name, value){ 
    if(!~arr.indexOf(value)) { 
      arr.push(name, value); 
      console.log(arr); 
    } 
}; 

HTML

<select ng-model="selects" ng-change="goChange(item.name, selects.value)" ng-options="i as i.value for i in options"> 
    <option value=""></option> 
</select> 
Problemi correlati