Normalizuj metody tablic i zwracaj wartości

Czy istnieje biblioteka Array JavaScript, która normalizuje wartości zwracane i mutacje tablicy? Myślę, że interfejs API JavaScript Array jest bardzo niespójny.

Niektóre metody powodują mutację tablicy:

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

Niektórzy nie:

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

Niektóre zwracają odwołanie do zmutowanej tablicy:

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

Niektóre po prostu wracają niezdefiniowane:

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

Chciałbym zawsze mutować tablicę i zawsze zwracać tę samą tablicę, dzięki czemu mogę mieć pewną spójność, a także być w stanie łączyć. Na przykład:

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

Próbowałem kilku prostych fragmentów takich jak:

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

Działa to dobrze dla większości metod mutacji, ale są problemy. Na przykład muszę napisać niestandardowe prototypy dla każdej metody, która nie mutuje oryginalnej tablicy.

Tak jak zawsze, kiedy to robiłem, myślałem, że może to zostało zrobione wcześniej? Czy są już jakieś lekkie biblioteki tablicowe? Byłoby miło, gdyby biblioteka dodawała również podkładki dla nowych metod JavaScript 1.6 dla starszych przeglądarek.

questionAnswers(3)

yourAnswerToTheQuestion