While your for loop works (and is probably faster by a matter of milliseconds), I recommend becoming comfortable with the Underscore functions, as they can be tremendously useful. Compare: var i = 0; for (i = 0; i < turnorder.length; i++) { if (turnorder[i].id == id) { turnorder.splice(i, 1); } } To: turnorder = _.reject(turnorder, function(item) { return item.id == id; }); Additionally, lines 7-15 can be easily changed to: obj.set('status_red', obj.get('bar1_value') <= obj.get('bar1_max') / 2); While you could do the same thing for setting status_dead, you still need the if block for changing the turn order, so it doesn't gain you as much. Finally, since you're removing status_dead if the token goes above 0 health, you might consider what happens if a token drops to 0 (and is removed from the turn order) and then gets healed/raised and needs to be put back.