Normalizar métodos de matriz e valores de retorno

Existe alguma biblioteca de matriz de JavaScript que normaliza os valores de retorno da matriz e mutações? Eu acho que a JavaScript Array API é muito inconsistente.

Alguns métodos alteram o array:

var A = [0,1,2];
A.splice(0,1); // reduces A and returns a new array containing the deleted elements

Alguns não

A.slice(0,1); // leaves A untouched and returns a new array

Alguns retornam uma referência para o array mutado:

A = A.reverse().reverse(); // reverses and then reverses back

Alguns apenas retornam indefinidos:

B = A.forEach(function(){});

O que eu gostaria é sempre alterar o array e sempre retornar o mesmo array, para que eu possa ter algum tipo de consistência e também ser capaz de encadear. Por exemplo:

A.slice(0,1).reverse().forEach(function(){}).concat(['a','b']);

Eu tentei alguns trechos simples como:

var superArray = function() {
    this.length = 0;
}

superArray.prototype = {
    constructor: superArray,

    // custom mass-push method
    add: function(arr) {
        return this.push.apply(this, arr);
    }
}

// native mutations
'join pop push reverse shift sort splice unshift map forEach'.split(' ').forEach(function(name) {
    superArray.prototype[name] = (function(name) {
        return function() {
            Array.prototype[name].apply(this, arguments);
            // always return this for chaining
            return this;
        };
    }(name));
});

// try it
var a = new superArray();
a.push(3).push(4).reverse();

Isso funciona bem para a maioria dos métodos de mutação, mas existem problemas. Por exemplo, eu preciso escrever protótipos personalizados para cada método que não sofra mutação do array original.

Então, como sempre enquanto eu estava fazendo isso, eu estava pensando que talvez isso tenha sido feito antes? Existe alguma biblioteca de matriz leve que já faz isso? Seria bom se a biblioteca também adicionasse shims para novos métodos do JavaScript 1.6 para navegadores mais antigos.

questionAnswers(3)

yourAnswerToTheQuestion