2014-09-04 7 views
21

mojego kodu jest jak poniżej:jak zapobiec duplikat w tablicy naciśnięciem w angularjs

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

tak arr zawierać będzie odczuwalna: [ "nazwa", "thing1"]

ale mam problem, gdy przesuwając element o tej samej dokładnej wartości, jak filtrować tę samą wartość elementu, ale nadal akceptuję aktualizację/zmiany. JSFIDDLE

+0

Można użyć 'grep' jQuery. [Zobacz tę] (http://stackoverflow.com/a/7364307/4365626) –

Odpowiedz

7

Wystarczy javascript.

Jeśli tablica zawiera element jego wskaźnik wynosi> = 0

więc można to zrobić, jeśli wskaźnik == -1, pozycja nie istnieje w tablicy, dzięki czemu można wcisnąć unikalny przedmiot

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

Edit: Pytałeś o zmianę numeru, to jak

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

próbowałem użyć tego, ale nie działa. I wciąż chcę zaktualizować liczbę w tablicy, po prostu nie wciskaj całego elementu do końca tablicy –

+0

sprawdź zmodyfikowany przykład – Vamsi

41

można użyć arr.indexOf, który zwraca -1, jeśli nie zostanie znaleziony, więc możesz go dodać.

np.

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

Jednak to nie działa w starych przeglądarkach ...

JQuery ma metodę ($.indexOf), który działa w każdej przeglądarce, nawet bardzo stare.

+0

działa świetnie ... dzięki! –

2

Jak większość odpowiedzi wskazała, można użyć metody Array.prototype.indexOf(), aby określić, czy istnieje wartość, czy nie. Aby to sprawdzić, sprawdź tablicę ciągów znaków pod kątem wartości zmiennej ng-models, selects.value, w ramach wywołania zwrotnego zdarzenia 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> 
Powiązane problemy