10
我經常發現自己希望對數組中的所有項目進行某些操作,並希望JavaScript具有類似於C#的LINQ的功能。所以,爲此,我掀起了數組原型的一些擴展:擴展JavaScript中的數組原型
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的原型,但除此之外,如果這些數組只有數字,那麼這是一個好主意嗎?
_「擴展數組,然後修改THAT」_雖然你的答案並不差,但這並不像你想象的那麼容易,除非我錯過了某些東西......) –
哦,這是絕對的不容易,不要誤解我的意思,但這是可行的;一個很好解釋的例子可以在http://www.bennadel.com/blog/2292-Extending-JavaScript-Arrays-While-Keeping-Native-Bracket-Notation-Functionality.htm – moberemk
中看到。問題在於它不是一個真正的數組 - 它只是擁有所有的原型方法。例如,除非使用提供的'add'方法,否則'length'屬性不會像真實數組那樣更新。 –