我的代码是这样的:
var arr = [];
arr.push(item1,item2);
所以arr
会包含:
["名称"" thing1"]
但是在推送具有相同精确值的元素时出现问题,如何过滤相同的元素值但仍接受更新/更改。 JSFIDDLE
答案 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'];