javascript 王者歸來一書裡的一段Array擴充

來源:互聯網
上載者:User

最近在看這本書,感覺很不錯。建議想學js的童鞋買本看看。

//any是一個集合迭代函數,它接受一個閉包作為參數//當集合中的任何一個元素調用閉包的結果返回非false時,any()返回計算結果,否則返回falseArray.prototype.any = function(closure,_set){//第二個參數是一個處理計算結果的集合//這麼設計的止的是為了在each方法中重用any_set = _set || false;//如果closure參數未定義if(typeof closure == 'undefined'){//規定為返回數組元素自身的值的函數closure = function(x){return x};};//如果closure參數不是函數if(typeof closure != 'function'){//那麼它應該被轉換成返回這個值的一個函數var c = closure;closure = function(x){return x == c};};//將第3個開始的參數轉換為數組,因為這些值也將作為迭代調用時的參數var args = Array.apply(this,arguments).slice(2);//迴圈遍曆數組中的每一個元素for(var i=0;i<this.length;i++){//以自訂的參數和數組的下標i為參數調用closure參數引用的閉包var rval = closure.apply(this,[this[i]].concat(args).concat(i));//如果傳回值轉換為boolean時為'真' 並且不是數值0if(rval || rval === 0){//如果_set存在,將計算結果放入_set集合if(_set && _set.put){_set.put(rval);}else{//否則,將第一個滿足條件的結果的返回return rval;}}}//返回結果集return _set;};//each是一個集合迭代函數,它接受一個閉包作為參數和一組選擇性參數//這個迭代函數依次將集合的每一個元素和選擇性參數用閉包進行計算,並將計算結果集返回Array.prototype.each = function(closure){closure = closure || undefined;var _set = [];_set.put = _set.push;return this.any.apply(this,[closure,_set].concat(Array.apply(this,arguments).slice(1)));}//若且唯若集合中的每一個元素調用閉包函數的返回結果為true時,它才返回trueArray.prototype.all = function(closure){return this.each.apply(this,arguments).length = this.length;}//除去數組中的null,false元素Array.prototype.trim = function(){return this.each();}//判斷數組中是否包含某個元素Array.prototype.contains = function(el){return this.any(function(x){ return x==el});}//返回數組中值等於el的第一個索引,若不存在,返回-1Array.prototype.indexOf = function(el){return this.any(function(x,i){return el==x ? i : -1});}//擷取從start到end的子數組Array.prototype.subarr = function(start,end){end = end || Math.Infinity;return this.each(function(x,i){return i>=start && i<end ? x : null});}//這是一個集合迭代函數,它接受一個list和一個閉包//返回這個閉包對於集合和list元素的一組匹配Array.prototype.map = function(list,closure){if(typeof list == 'function' && typeof closure != 'function'){var li = closure;closure = list;list = li;};closure = closure || Array;return this.each(function(x,i){return closure(x,list[i])});}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.