我经常发现自己想要对数组中的所有项进行某些操作,我希望JavaScript有类似C#的LINQ。所以,为此,我掀起了Array原型的一些扩展:
var data = [1, 2, 3];
Array.prototype.sum = function () {
var total = 0;
for (var i = 0; i < this.length; i++) {
total += this[i];
}
return total;
};
Array.prototype.first = function () {
return this[0];
};
Array.prototype.last = function () {
return this[this.length - 1];
};
Array.prototype.average = function () {
return this.sum() / this.length;
};
Array.prototype.range = function () {
var self = this.sort();
return {
min: self[0],
max: self[this.length-1]
}
};
console.log(data.sum()) <-- 6
如果您需要对它们进行一些数学处理,这使得处理数组变得更加容易。是否有任何建议反对使用这样的模式?我想我应该创建自己继承自Array的原型的类型,但除此之外,如果这些数组中只有数字,这是一个好主意吗?
答案 0 :(得分:5)
一般来说you should avoid extending base objects因为它可能与该对象的其他扩展冲突。理想情况下,扩展Array然后修改THAT是最安全的做事方式,因为它可以保证不会与其他可能尝试做同样事情的开发人员发生冲突(即使他们不应该这样做)。
基本上,尽可能避免扩展基础对象,因为与扩展数组对象相比,它可能会让您陷入麻烦,实际上没什么好处。