code: function getNewIndices ( length, methodName, args ) {
    	var spliceArguments, newIndices = [], removeStart, removeEnd, balance, i;
  
    	spliceArguments = getSpliceEquivalent( length, methodName, args );
  
    	if ( !spliceArguments ) {
    		return null; // TODO support reverse and sort?
    	}
  
    	balance = ( spliceArguments.length - 2 ) - spliceArguments[1];
  
    	removeStart = Math.min( length, spliceArguments[0] );
    	removeEnd = removeStart + spliceArguments[1];
    	newIndices.startIndex = removeStart;
  
    	for ( i = 0; i < removeStart; i += 1 ) {
    		newIndices.push( i );
    	}
  
    	for ( ; i < removeEnd; i += 1 ) {
    		newIndices.push( -1 );
    	}
  
    	for ( ; i < length; i += 1 ) {
    		newIndices.push( i + balance );
    	}
  
    	// there is a net shift for the rest of the array starting with index + balance
    	if ( balance !== 0 ) {
    		newIndices.touchedFrom = spliceArguments[0];
    	} else {
    		newIndices.touchedFrom = length;
    	}
  
    	return newIndices;
    }
docs: So if you had something like this...  array = [ 'a', 'b', 'c', 'd' ]; array.push( 'e' );  ...you'd get `[ 0, 1, 2, 3 ]` - in other words, none of the old indices have changed. If you then did this...  array.unshift( 'z' );  ...the indices would be `[ 1, 2, 3, 4, 5 ]` - every item has been moved one higher to make room for the 'z'. If you removed an item, the new index would be -1...  array.splice( 2, 2 );  ...this would result in [ 0, 1, -1, -1, 2, 3 ].  This information is used to enable fast, non-destructive shuffling of list sections when you do e.g. `ractive.splice( 'items', 2, 2 );