问题是我有多个具有相同id的对象。正如您所看到的,在删除具有相同ID的所有项目时,这是有效的。我如何逐个删除对象,无论它们是否是相同的ID ...谢谢
individualObjects:[],
actions:{
increment:function(){
var obj = this.get('object');
this.get('individualObjects').pushObject(obj);
},
decrement:function(){
var obj = this.get('object');
var filter = this.get('individualObjects').findBy('obj_id', obj.get('obj_id'));
this.get('individualObjects').removeObject(filter);
}
}
答案 0 :(得分:1)
我不知道ember,但是你想在数组上做一个foreach,然后在每个数组上测试id。它应该是这样的:
decrement:function(){
var obj = this.get('object');
self = this;
this.get('individualObjects').each(function(individualObject) {
if (individualObject.get('obj_id') == obj.get('obj_id'))
... you want to do something here? ...
self.get('individualObjects').removeObject(individualObject);
}
}
这样你可以单独删除每个对象。在删除之前或之后运行任何必要的代码。如果要先对它进行排序,可以在运行每个函数之前进行排序。
答案 1 :(得分:1)
要过滤数组,您需要使用Array.filter找出不属于“ individualObjects ”的项目,稍后只需使用“ removeObjects < EM>“
decrement:function(){
var objects = this.get('individualObjects')
var notWanted = objects.filterBy('obj_id', this.get('object.obj_id'));
this.get('individualObjects').removeObjects(notWanted);
}
和解决方案2
decrement:function(){
var removeObj = this.get('object');
var objects = this.get('individualObjects')
// As the condition is true given object is returned
var notWanted = objects.filter(obj => { return obj.get('obj_id') === removeObj.get('obj_id') });
this.get('individualObjects').removeObjects(notWanted);
}
好的,所以你想逐个删除项目。奇怪但可以完成
首先得到
的长度var notWantedCount = objects.filterBy('obj_id', this.get('object.obj_id')).length;
现在
for(var i=0; i <= notWantedCount; i++) {
var toRemove = individualObjects.findBy('obj_id', obj.get('obj_id'));
individualObjects.removeObject(toRemove);
// Make some custom actions one by one.
}