Нормализовать методы 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 для старых браузеров.