从具有相同ID的数组逐个删除项目

时间:2016-03-24 02:05:06

标签: javascript ember.js

问题是我有多个具有相同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);
   }
}

2 个答案:

答案 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

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.
}