国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript設計模式之迭代器模式

2024-05-06 15:43:55
字體:
來源:轉載
供稿:網友

迭代器模式分為內部迭代器和外部迭代器,內部迭代器就是在函數內部定義好迭代的規則,它完全接手整個迭代的過程,外部只需一次初始調用。

內部迭代器

以下自行實現的類似jquery中$.each()的each()函數就是內部迭代器

//實現一個jq的$.each()迭代器var arr = [1, 2, 3, 4, 5, 6, 7, 8]var each = function(arr, callback){  for(var i=0; i<arr.length; i++){    callback.call(null, i, arr[i])  //把下標和元素當作參數傳遞給callback參數  }}each(arr, function(i, n){  console.log(i, n);})//類似于jquery的 $.each(arr, function(i,n){})

內部迭代器在調用時非常方便,但是有一個缺點,就是無法同時迭代兩個目標值,比如上述each函數就無法同時迭代兩個數組。

對兩個數組做相等性判斷時,如果不改迭代器內部方法實現,只能通過each的回調函數進行實現,雖然能實現,但不是很優雅。

//對兩個數組做相等性判斷時,如果不改迭代器內部方法實現,只能通過each的回調函數進行實現,雖然能實現,但不是很優雅。let compare = function (ary1, ary2) {  if(ary1.length !== ary2.length){    throw new Error('ar1和ary2長度不相等。')  }  each(ary1, function (i, n) {    if(n !== ary2[i] ){      throw new Error('ary1和ary2不相等。')    }  })  console.log('ary1和ary2相等!');}compare([1,2,3], [1,2, 3])

外部迭代器

外部迭代器必須顯示請求迭代下一個元素,雖然這樣做會增加調用的復雜度,但也會增強迭代的操作靈活性,程序可以手工控制迭代的過程和順序。

外部迭代器示例代碼1:

let Iterator = function (obj) {  let current = 0;  let next = function () {    current += 1  }  let isNotDone = function () {    return current <= obj.length  }  let getCurrentItem = function () {    return obj[current];  }  return {    next,    isNotDone,    getCurrentItem  }}//外部迭代器通過next方法進行手工迭代let arr = ['a', true, false, '10', 88, 741]let iterator1 = Iterator(arr)console.log(iterator1.getCurrentItem()); // aiterator1.next() console.log(iterator1.getCurrentItem()); // trueiterator1.next() console.log(iterator1.getCurrentItem()); // falseiterator1.next() console.log(iterator1.getCurrentItem()); // '10'//改寫compare函數let compare = function (iterator1, iterator2) {  while(iterator1.isNotDone() && iterator2.isNotDone()){    if(iterator1.getCurrentItem() !== iterator2.getCurrentItem()){      throw new Error('iterator1和iterator2不相等。')    }    iterator1.next()    iterator2.next()  }  console.log('iterator1和iterator2相等。');}let iterator1 = Iterator([1, 2, 3, 4])let iterator2 = Iterator([1, 2, 3, 4, 5])compare(iterator1, iterator2)  //iterator1和iterator2不相等。

外部迭代器示例代碼2:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 利津县| 东丽区| 诸暨市| 东乡县| 昌邑市| 丰县| 安康市| 南澳县| 武定县| 平阴县| 黑水县| 社会| 扬州市| 汉中市| 乌鲁木齐县| 长治市| 徐州市| 北海市| 民县| 龙岩市| 永济市| 黑水县| 邯郸市| 石城县| 高陵县| 额济纳旗| 昌宁县| 宣武区| 日照市| 张家口市| 九龙县| 巴塘县| 潜江市| 松滋市| 五大连池市| 闵行区| 长岛县| 崇义县| 庆元县| 彭州市| 宣威市|