我正在尝试通过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的对象。非常感谢任何帮助。谢谢你的阅读!
答案 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.
约什