配列の戻り値と変異を正規化する JavaScript 配列ライブラリはありますか? 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 メソッドの shim も追加するとよいでしょう。