js/libs/ember-1.5.1.js
function (index) {
    var newArrayOperation = this._operations[index],
        leftArrayOperation = this._operations[index-1], // may be undefined
        rightArrayOperation = this._operations[index+1], // may be undefined
        leftOp = leftArrayOperation && leftArrayOperation.type,
        rightOp = rightArrayOperation && rightArrayOperation.type;

    if (leftOp === INSERT) {
        // merge left
        leftArrayOperation.count += newArrayOperation.count;
        leftArrayOperation.items = leftArrayOperation.items.concat(newArrayOperation.items);

      if (rightOp === INSERT) {
        // also merge right (we have split an insert with an insert)
        leftArrayOperation.count += rightArrayOperation.count;
        leftArrayOperation.items = leftArrayOperation.items.concat(rightArrayOperation.items);
        this._operations.splice(index, 2);
      } else {
        // only merge left
        this._operations.splice(index, 1);
      }
    } else if (rightOp === INSERT) {
      // merge right
      newArrayOperation.count += rightArrayOperation.count;
      newArrayOperation.items = newArrayOperation.items.concat(rightArrayOperation.items);
      this._operations.splice(index + 1, 1);
    }
  }
function (index) {
    var newArrayOperation = this._operations[index],
        leftArrayOperation = this._operations[index-1], // may be undefined
        rightArrayOperation = this._operations[index+1], // may be undefined
        leftOp = leftArrayOperation && leftArrayOperation.type,
        rightOp = rightArrayOperation && rightArrayOperation.type;

    if (leftOp === INSERT) {
        // merge left
        leftArrayOperation.count += newArrayOperation.count;
        leftArrayOperation.items = leftArrayOperation.items.concat(newArrayOperation.items);

      if (rightOp === INSERT) {
        // also merge right (we have split an insert with an insert)
        leftArrayOperation.count += rightArrayOperation.count;
        leftArrayOperation.items = leftArrayOperation.items.concat(rightArrayOperation.items);
        this._operations.splice(index, 2);
      } else {
        // only merge left
        this._operations.splice(index, 1);
      }
    } else if (rightOp === INSERT) {
      // merge right
      newArrayOperation.count += rightArrayOperation.count;
      newArrayOperation.items = newArrayOperation.items.concat(rightArrayOperation.items);
      this._operations.splice(index + 1, 1);
    }
  }
function ( index ) { var newArrayOperation = this . _operations [ index ] , leftArrayOperation = this . _operations [ index - 1 ] , // may be undefined rightArrayOperation = this . _operations [ index + 1 ] , // may be undefined leftOp = leftArrayOperation && leftArrayOperation . type , rightOp = rightArrayOperation && rightArrayOperation . type ; if ( leftOp === INSERT ) { // merge left leftArrayOperation . count += newArrayOperation . count ; leftArrayOperation . items = leftArrayOperation . items . concat ( newArrayOperation . items ) ; if ( rightOp === INSERT ) { // also merge right (we have split an insert with an insert) leftArrayOperation . count += rightArrayOperation . count ; leftArrayOperation . items = leftArrayOperation . items . concat ( rightArrayOperation . items ) ; this . _operations . splice ( index , 2 ) ; } else { // only merge left this . _operations . splice ( index , 1 ) ; } } else if ( rightOp === INSERT ) { // merge right newArrayOperation . count += rightArrayOperation . count ; newArrayOperation . items = newArrayOperation . items . concat ( rightArrayOperation . items ) ; this . _operations . splice ( index + 1 , 1 ) ; } }
see SubArray for a better implementation.
see SubArray for a better implementation .