2014-09-04 2 views
21

meinen Code Duplikat in Array Push zu verhindern, ist wie folgt:wie in AngularJS

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

so wird arr enthalten wie: [ "name", "thing1"]

Aber ich habe Problem, wenn pushing Element mit dem gleichen genauen Wert, wie filtere ich den gleichen Elementwert, akzeptiere aber immer noch update/changes. JSFIDDLE

+0

Sie 'grep' jQuery verwenden können. [Siehe hierzu] (http://stackoverflow.com/a/7364307/4365626) –

Antwort

7

Nur Javascript ist genug.

Wenn ein Array das Element enthält, dessen Index> = 0

ist

so können Sie dies tun, wenn der Index == -1 Punkt, nicht in dem Array vorhanden sind, so können Sie einzigartige Artikel

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

Edit: Sie zum ändern der Anzahl gefragt, ist dies, wie

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

Ich habe versucht, dies zu verwenden, aber nicht funktioniert. Und ich möchte immer noch die Zahl im Array aktualisieren, nur nicht das gesamte Element bis zum Ende des Arrays –

+0

überprüfen Sie das modifizierte Beispiel – Vamsi

41

Sieverwenden könnenwas -1 zurückgibt, wenn es nicht gefunden wird, also können Sie es dann hinzufügen.

z.B.

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

Allerdings funktioniert das nicht in alten Browsern ...

JQuery hat eine Methode ($.indexOf), die in jedem Browser funktioniert, auch sehr alte.

+0

funktioniert super ... danke! –

2

Wie die meisten Antworten darauf hingewiesen haben, können Sie mit der Methode Array.prototype.indexOf() feststellen, ob ein Wert existiert oder nicht. Um dies zu überprüfen, überprüfen Sie das Array der Strings gegen Ihre ng-models Value-Eigenschaft, selects.value, innerhalb der ng-change() Ereignis-Callback.

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>