亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

迭代器模式

迭代器模式

提供一种方法,可以顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示,就叫做迭代器模式。
绝大部分程序语言都内置了迭代器,比如 ES5 的 forEach 等,ES6 更是为 Array、Map、Set以及类数组对象提供了统一的迭代器接口,使用 for...of 循环便会默认调用该接口。

应用场景

由于绝大部分程序语言都内置了迭代器,所以我们没有必要去自己写一个,除非我们想要手动控制迭代的过程或顺序,用来满足更加多变的需求。
比如我们想要创建一个迭代器,能够访问数据集合的第一个、最后一个、前一个、后一个、当前这个、某一个以及倒序的功能。

例子:

const Iterator = (list) => {
  // 当前索引值,默认为第一个
  let current = 0;

  // 第一个
  const first = () => {
    return list[0];
  };

  // 最后一个
  const last = () => {
    return list[list.length - 1];
  };

  // 前一个
  const pre = () => {
    current -= 1;
    // 如果当前是第一个,则返回 undefined
    if (current < 0) {
      current = 0;
      return;
    }
    // 否则返回前一个
    return list[current];
  };

  // 后一个
  const next = () => {
    current += 1;
    // 如果当前是最后一个,则返回 undefined
    if (current === list.length) {
      current = list.length - 1;
      return;
    }
    // 否则返回后一个
    return list[current];
  };

  // 当前这个
  const cur = () => {
    return list[current];
  };

  // 某一个
  const nth = (index) => {
    // 如果索引值在数组长度范围内,则返回相应值
    if (index >= 0 && index < list.length) {
      return list[index];
    }
    // 否则返回 undefined
    return;
  };

  // 倒序
  const reverse = () => {
    const _arr = [];
    for (let i = list.length - 1; i >= 0; i--) {
      _arr.push(list[i]);
    }
    return _arr;
  };

  return {
    first,
    last,
    pre,
    next,
    cur,
    nth,
    reverse,
  };
};

// 测试代码
const arr = ['a', 'b', 'c', 'd'];
const iterator = Iterator(arr);

console.log(iterator.first()); // a
console.log(iterator.last()); // d
console.log(iterator.next()); // b
console.log(iterator.next()); // c
console.log(iterator.pre()); // b
console.log(iterator.cur()); // b
console.log(iterator.nth(3)); // d
console.log(iterator.reverse()); // ["d", "c", "b", "a"]

如有错误,欢迎指正,本人不胜感激。

點擊查看更多內容
2人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
1.4萬
獲贊與收藏
860

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消