【发布时间】:2014-09-04 13:51:53
【问题描述】:
我的代码是这样的:
var arr = [];
arr.push(item1,item2);
所以arr 将包含如下内容:
["name","thing1"]
但我在推送具有相同精确值的元素时遇到问题,我如何过滤相同的元素值但仍接受更新/更改。 JSFIDDLE
【问题讨论】:
-
你可以使用jQuery的
grep。 See this
我的代码是这样的:
var arr = [];
arr.push(item1,item2);
所以arr 将包含如下内容:
["name","thing1"]
但我在推送具有相同精确值的元素时遇到问题,我如何过滤相同的元素值但仍接受更新/更改。 JSFIDDLE
【问题讨论】:
grep。 See this
您可以使用arr.indexOf,如果找不到则返回-1,然后您可以添加它。
例如
if (arr.indexOf(item) == -1) {
arr.push(item);
}
但是,这在旧浏览器中不起作用...
JQuery 有一个方法 ($.indexOf) 适用于所有浏览器,甚至是非常旧的浏览器。
【讨论】:
只有 javascript 就足够了。
如果数组包含项,则其索引 >= 0
所以你可以这样做,如果 index == -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
}
【讨论】:
正如大多数答案所指出的,您可以使用Array.prototype.indexOf() 方法来确定值是否存在。为了检查这一点,请在ng-change() 事件回调中根据您的ng-models 值属性selects.value 检查字符串数组。
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>
【讨论】:
你应该使用Angular Filters。
可以找到一些实现作为类似问题的答案:How to make ng-repeat filter out duplicate results
【讨论】:
过滤数组中的重复项(es6):
let arr = ['foo', 'foo', 'bar', 'baz'];
Array.from(new Set(arr));
console.log(arr);
// ['foo', 'bar', 'baz'];
【讨论】: