如何防止在angularjs中的数组推送重复

时间:2014-09-04 13:51:54

标签: arrays angularjs

我的代码是这样的:

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

所以arr会包含:     ["名称"" thing1"]

但是在推送具有相同精确值的元素时出现问题,如何过滤相同的元素值但仍接受更新/更改。 JSFIDDLE

5 个答案:

答案 0 :(得分:41)

您可以使用arr.indexOf,如果找不到则返回-1,这样您就可以添加它。

e.g。

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

但是,这在旧浏览器中不起作用......

JQuery有一个方法($.indexOf)可以在每个浏览器中运行,甚至是很旧的浏览器。

答案 1 :(得分:9)

只需javascript即可。

如果数组包含其索引为> = 0

的项目

所以你可以这样做,如果index == -1,数组中不存在item,那么你可以推送唯一的项

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

修改 你要求更改号码,这就是

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
}

答案 2 :(得分:2)

正如大多数答案所指出的那样,您可以使用Array.prototype.indexOf()方法来确定值是否存在。要检查此情况,请在ng-models事件回调中针对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>

答案 3 :(得分:1)

您应该使用Angular Filters

可以找到一些实现作为类似问题的答案:How to make ng-repeat filter out duplicate results

答案 4 :(得分:0)

要过滤数组(es6)中的重复项:

let arr = ['foo', 'foo', 'bar', 'baz'];
Array.from(new Set(arr));
console.log(arr);
// ['foo', 'bar', 'baz'];