<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 迭代器模式 是指提供一種方法順序訪問一個聚合對象中的各個元素,而又不需要暴露該對象的內部表示。 ## 實現自己的迭代器 ```javascript var each = function(arr, callback){ for(var i=0, l=arr.length, i < l, i++){ callback(i, arr[i]); } }; each(['a','b','c'], function(i, val){ console.log(val); }); // a, b, c ``` ## 內部迭代器和外部迭代器 ### 內部迭代器 上面的`each`就屬于內部迭代器,函數內部已經定義好了迭代規則,它完全接手了整個迭代過程,外部只需要一次調用。 ### 外部迭代器 外部迭代器必須顯式地請求迭代一個元素。 ```javascript var Iterator = function(obj){ var current = 0; var next = function(){ current += 1; } var isDone = function(){ return current > obj.length; } var getCurrentItem = function(){ return obj[current]; } return { next: next, isDone: isDoen, getCurrentItem: getCurrentItem, length: obj.length } }; // 改寫對比函數 var compare = function(iterator1, iterator2){ if(iterator1.length !== iterator2.length){ throw new Error('不相等'); } while(!iterator1.isDone() && !iterator2.isDone()){ if(iterator1.getCurrentItem() !== iterator2.getCurrentItem()){ thriw new Error('不相等') } iterator1.next(); iterator2.next(); } alert('相等') }; var iterator1 = Iterator([1,2,3]); var iterator2 = Iterator([1,2,4]); compare(iterator1, iterator2); ``` ## 迭代類數組對象和字面量對象 jQuery中的`$.each`實現 ```javascript $.each = function(obj, callback){ var value, i = 0, length = obj.length; isArray = isArraylike(obj); if(isArray){ // 迭代類數組 for( ; i<length; i++){ value = callback(obj[i], i); if(value === false){ break; // 中止迭代器 } } }else{ for( i in obj ){ // 迭代字面量對象 value = callback(obj[i], i); if(value === false){ break; } } } }; ``` ## 倒序迭代器 ```javascript var reverseEach = function(arr, callback){ for(var l=ary.length-1, l>=0; l--){ callback(l, ary[l]); } }; reverseEach([0,1,2], function(i, n){ console.log(n); }); // 2,1,0 ``` ## 中止迭代器 如果函數的返回值為`false`則`break` ```javascript $.each = function(obj, callback){ var value, i = 0, length = obj.length; isArray = isArraylike(obj); if(isArray){ // 迭代類數組 for( ; i<length; i++){ value = callback(obj[i], i); if(value === false){ break; // 中止迭代器 } } }else{ for( i in obj ){ // 迭代字面量對象 value = callback(obj[i], i); if(value === false){ break; } } } }; ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看