我有一组单选按钮,当选择单选按钮时,元素被推入对象。
然后我需要获取对象中元素的值,然后将它们推入数组中,如果它们不在数组中。
我的问题是我在使用此函数的每个值的数组中不断获得重复或更多,因为我没有正确检查它们是否存在。
如何检查元素是否已存在于我的数组中,然后将其排除在外?
_this.selected = {};
_this.selectedArray = [];
//loop through the object
angular.forEach(_this.selected, function ( item ){
//if it is not the first time the array is getting data loop through the array
if(_this.selectedArray.length > 0) {
_this.selectedArray.forEach(function (node){
//check to see if the item already exists-- this is where it is failing
//and running the loop too many times
if(node.id !== item.id){
_this.selectedArray.push(item);
}
});
} else {
_this.selectedArray.push(share);
}
});
答案 0 :(得分:1)
您可以使用其他哈希来检查是否已将项添加到数组中。
_this.selected = {};
_this.selectedArray = [];
_this.selectedHash = {};
//loop through the object
angular.forEach(_this.selected, function ( item ){
if(_this.selectedHash[item.id]) { return; }
_this.selectedArray.push(item);
_this.selectedHash[item.id] = 1;
});
答案 1 :(得分:0)
你试过jQuery的inArray
吗? http://api.jquery.com/jquery.inarray
它与indexOf
上的String
方法相同。
您可以尝试if $.inArray(node, selectedArray) == -1 // element is not in the array
答案 2 :(得分:0)
您可以在该数组上运行此函数以将其减少为唯一值,而不是应用复杂代码来检查数组是否包含元素
var getOnlyUniqueValuesInArray = function(arrayObj) {
return arrayObj.reduce(function(a, b) {
if (a.indexOf(b) < 0) a.push(b);
return p;
}, []);
};
答案 3 :(得分:0)
嗨,这应该有帮助
var app = angular.module('app', []);
app.controller('firstCtrl', function($scope){
var app = angular.module('app', []);
app.controller('firstCtrl', function($scope) {
_this.selected = {};
_this.selectedArray = [];
//loop through the object
angular.forEach(_this.selected, function(item) {
//if it is not the first time the array is getting data loop through the array
if (_this.selectedArray.length > 0) {
var canAdd = true;
_this.selectedArray.forEach(function(node) {
//do not add iny any of node.id will be equal to item.id
if (node.id == item.id) {
canAdd = false;
}
});
if(canAdd){
_this.selectedArray.push(item);
};
} else {
_this.selectedArray.push(share);
}
});
})
});