Нормализовать методы Array и возвращаемые значения

Есть ли библиотека JavaScript Array, которая нормализует возвращаемые значения и мутации Array? Я думаю, что JavaScript Array API очень непоследователен.

Некоторые методы изменяют массив:

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

Некоторые нет:

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

Некоторые возвращают ссылку на мутированный массив:

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

Некоторые просто возвращают undefined:

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

Я хотел бы всегда мутировать массив и всегда возвращать один и тот же массив, чтобы я мог иметь некоторую согласованность, а также иметь возможность цепочки. Например:

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

Я попробовал несколько простых фрагментов, таких как:

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();

Это прекрасно работает для большинства методов мутации, но есть проблемы. Например, мне нужно написать собственные прототипы для каждого метода, который не изменяет исходный массив.

Поэтому, как всегда, когда я делал это, я думал, что, возможно, это было сделано раньше? Существуют ли легковесные библиотеки массивов, которые уже делают это? Было бы неплохо, если бы библиотека также добавила прокладки для новых методов JavaScript 1.6 для старых браузеров.

Ответы на вопрос(3)

Ваш ответ на вопрос