通过它的id(角度)从数组中删除对象

时间:2014-12-04 17:39:45

标签: javascript angularjs underscore.js

我正在尝试通过ID的键/值从数组中删除对象。我通常只是通过索引拼接,但是索引可能会发生很大的变化,因为多个用户将操纵和更新对象,所以我想挂钩更具体的东西 - 也就是id。所以我有一些逻辑来检查它是否仍然存在,如果是这样,则通过它的ID删除它。但是我似乎无法使语法完全正确。我使用的是underscore.js,我不知道有没有它更容易,但值得一提。

这就是我所拥有的 -

$scope.toggleSelection = function(typeId,name,index){

        //check if exists in array
        check =  $scope.multipleTypes.some( function( el ) {
            return el.name === name;
        });

        //checked on/off actions
        if($scope.items[index].checked == false || $scope.items[index].checked == undefined ){
            //IS cecked
            if(check){
                //already exists, do nothing
            }else{
                $scope.multipleTypes.push({id:typeId, name:name, checked: true});
            }
        }else{
            //IS not checked
            if(check){
          var list = _.filter($scope.multipleTypes, function(element){ 
                    return element.id != typeId; 
                }
                $scope.multipleTypes = list;

            }else{
                //is not there, do nothing
            }

        }
    };

因此,如果它确实存在并且被检查,它就会被推送。如果确实存在且未选中,我想通过它的ID将其从$ scope.multipleTypes中删除。我想我做错了,我想做的就是从$ scope.multipleTypes中删除一个具有匹配ID的对象。非常感谢任何帮助。谢谢你的阅读!

2 个答案:

答案 0 :(得分:3)

如果您可以使用UnderScore Js,则可以非常轻松地完成。

这是一个例子:

var someArray= [{Employee:'ved',id:20}, 

           {Employee:"ved",age:25},

           {Employee:"p",age:2}];

var a = _.findWhere(someArray,{id:25});//searching Element in Array
var b= _.indexOf(someArray,a);// getting index.
someArray.splice(b,1);// removing.

答案 1 :(得分:0)

我通常通过id找到对象,然后拼接出来。请注意,angularjs会为对象添加其他属性。

e.g

$scope.items = [......]

var findItemByID = function(id, items){   
  angular.forEach(items, function(item){
    if(item.id === id){
      return item;
    }   
  })   
  return null;
}

var removeItemByID = function(id, items){    
   var item = findItemByID(id);    
   if(item){
     items.splice(items.indexOf(item), 1);    
   } 
}

//you can now do removeItemByID(id, $scope.items);

//I have not tested this code and it may have syntax errors. hope you get the idea.

约什