检查对象中是否存在元素

时间:2014-07-30 14:23:32

标签: javascript arrays angularjs object

我有一组单选按钮,当选择单选按钮时,元素被推入对象。

然后我需要获取对象中元素的值,然后将它们推入数组中,如果它们不在数组中。

我的问题是我在使用此函数的每个值的数组中不断获得重复或更多,因为我没有正确检查它们是否存在。

如何检查元素是否已存在于我的数组中,然后将其排除在外?

      _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);
        }
      });

4 个答案:

答案 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);
    }
  });

})

});