Как предотвратить дублирование в массиве push в angularjs
мой код выглядит так:
var arr = [];
arr.push(item1,item2);
поэтому arr
будет содержать: [ "Имя", "thing1" ]
Но у меня проблема при нажатии элемента с таким же точным значением, как мне фильтровать одно значение элемента, но при этом принимать обновления/изменения. JSFIDDLE
Ответы
Ответ 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>
Ответ 4
Вы должны использовать Angular Фильтры.
Некоторые реализации можно найти в качестве ответов на аналогичный вопрос: Как сделать дублирование результатов фильтра ng-repeat