Подтвердить что ты не робот

Как предотвратить дублирование в массиве push в angularjs

мой код выглядит так:

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

поэтому arr будет содержать:   [ "Имя", "thing1" ]

Но у меня проблема при нажатии элемента с таким же точным значением, как мне фильтровать одно значение элемента, но при этом принимать обновления/изменения. JSFIDDLE

4b9b3361

Ответ 1

Вы можете использовать arr.indexOf, который возвращает -1, если он не найден, поэтому вы можете его добавить.

например.

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

Однако это не работает в старых браузерах...

JQuery имеет метод ($.indexOf), который работает в каждом браузере, даже очень старые.

Ответ 2

Просто javascript достаточно.

Если массив содержит элемент, его индекс равен >= 0

чтобы вы могли это сделать, если index == -1, элемент не существует в массиве, поэтому вы можете нажать уникальный элемент

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

Edit: Вы попросили изменить номер, вот как

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
}

Ответ 3

Как указано в большинстве ответов, вы можете использовать метод Array.prototype.indexOf(), чтобы определить, существует ли значение или нет. Чтобы проверить это, проверьте массив строк на свойству ng-models value, selects.value, в обратном вызове события 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>