2014-09-04 66 views
21

我的代码阵推是这样的:如何防止重复在angularjs

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

所以arr将包含类似: [“名称”,“thing1”]

但我得到了问题的时候推动元素具有相同的精确值,我如何过滤相同的元素值,但仍然接受更新/更改。 JSFIDDLE

+0

您可以使用jQuery的'grep'。 [看到这个](http://stackoverflow.com/a/7364307/4365626) – 2015-09-15 12:34:43

回答

7

只需javascript就够了。

如果数组包含其索引是该项目> = 0

这样你就可以做到这一点,如果指数== -1,项目不会在数组中存在的,所以你可以把唯一的项目

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 
} 
+0

我试图用这个,但没有工作。我仍然想要更新数组中的数字,只是不要将整个元素推到数组的末尾 – 2014-09-04 14:05:18

+0

检查修改的示例 – Vamsi 2014-09-04 14:22:25

41

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

例如

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

然而,这并不在旧的浏览器工作...

jQuery有,在每一个浏览器的工作原理,即使是非常老的一个方法($.indexOf)。

+0

工作得很好......谢谢! – 2017-02-10 01:39:18

2

正如大多数答案指出的那样,您可以使用Array.prototype.indexOf()方法来确定值是否存在。为了检查这一点,请在ng-change()事件回调中检查对应于您的ng-models值属性selects.value的字符串数组。

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>