2008年12月7日

Array:重複方法

Array | 特徵 | 變動方法 | 唯讀方法 | 重複方法

重複方法的參數包括一個回呼函式;及一個選擇性的物件,作為回呼函式中的 this 物件。如果沒有設定物件參數,則用與回呼函式連結的全域(global)物件。回呼函式需要三個參數:元素,指標,被處理中的陣列。回呼函式被用來處理陣列的每一個元素;但是陣列的指標處沒有設定元素值或已被刪除了,則會跳過不處理。重複方法不會變動原陣列。當重複方法開始執行時,陣列的元素值會被固定下來,作為處理的依據;開始執行後,元素值有變動或增刪,都會以原陣列值為依據。下面列出重複方法:

filter()

回呼函式用來測試陣列的元素,符合規則(回傳 true)的元素,會組成一個新陣列。其語法是:

var ar = array.filter( 回呼函式 [, 物件]);

IE 會失敗;Firefox, Safari, Chrome 有支援。

  • 程式用法:

    <script type='text/javascript'>
    var ar=[ '吳宗憲', '男', '諧星', '台北市'  ];

    function length2(element, index, array)
    {
      return element.length>2;
    }
    document.write( ar.filter( length2 ) );
    </script>

  • 執行結果:

    吳宗憲,台北市

forEach()

回呼函式被用來處理每一個元素。其語法是:

var ar = array.forEach( 回呼函式 [, 物件]);

IE 會失敗;Firefox, Safari, Chrome 有支援。

  • 程式用法:

    <script type='text/javascript'>
    var ar=[ '吳宗憲', '男', '諧星', '台北市'  ];
    ar[9]=0;

    function dump(element, index, array)
    {
        document.write( index +' : '+ element +'<br />' );
    }

    ar.forEach( dump ) ;
    </script>

  • 執行結果:

    0 : 吳宗憲
    1 : 男
    2 : 諧星
    3 : 台北市
    9 : 0

every()

回呼函式被用來測試每一個元素。如果所有元素都符合測試規則,則回傳 true;只要有一個元素的測試結果是 false,則回傳 false。空陣列會回傳 true。其語法是:

var ar = array.every( 回呼函式 [, 物件]);

IE 會失敗;Firefox, Safari, Chrome 有支援。

  • 程式用法:

    <script type='text/javascript'>
    var ar=['Jolin', 'Jay', 'Janet', 'Joe'];
    function Jsss(element, index, array)
    {
      var re=/^j[a-zA-Z]+/i;
      return re.test( element );
    }

    document.write( ar.every( Jsss ) );
    </script>

  • 執行結果:

    true

map()

回呼函式被用來處理每一個元素,產生的值會組成一個新陣列。其語法是:

var ar = array.map( 回呼函式 [, 物件]);

IE 會失敗;Firefox, Safari, Chrome 有支援。

  • 程式用法:

    <script type='text/javascript'>
    var ar=['Jolin', 'Jay', 'Janet', 'Joe'];
    function upperAll(element)
    {
      return element.toUpperCase();
    }

    document.write( ar.map( upperAll ) );
    </script>

  • 執行結果:

    JOLIN,JAY,JANET,JOE

some()

回呼函式被用來測試每一個元素,只要有一個元素符合測試規則,就回傳 true;否則回傳 false。其語法是:

var ar = array.some( 回呼函式 [, 物件]);

IE 會失敗;Firefox, Safari, Chrome 有支援。

  • 程式用法:

    <script type='text/javascript'>
    var ar=['A', 'B', 'C', 'D'];
    function cFind(element, index, array)
    {
      return element == 'C';
    }

    document.write( ar.some( cFind ) );
    </script>

  • 執行結果:

    true

reduce()

使用回呼函式由左至右處理每一個元素,會處理元素與前一次產生的值,然後產生新的值。可選擇性設初值,否則以第一個元素為初值。其語法是:

var ar = array.reduce( 回呼函式 [, 初值]);

回呼函式可設四個參數:初值(或前一次回呼產生的值),元素,指標,被處理中的陣列。

IE, Safari, Chrome 會失敗;Firefox 有支援。

  • 程式用法:

    <script type='text/javascript'>
    var ar=['A', 'B', 'C', 'D'];
    var a2=ar.reduce(
           function(a, b, index)
           { return a +' : '+ b +'='+index; } 
                    );
    document.write( typeof a2
                +'<br />'+ a2);
    </script>

  • 執行結果:

    string
    A : B=1 : C=2 : D=3

reduceRight()

使用回呼函式由右至左處理每一個元素,會處理元素與前一次產生的值,然後產生新的值。可選擇性設初值,否則以最後一個元素為初值。其語法是:

var ar = array.reduceRight( 回呼函式 [, 初值]);

回呼函式可設四個參數:初值(或前一次回呼產生的值),元素,指標,被處理中的陣列。

IE, Safari, Chrome 會失敗;Firefox 有支援。

  • 程式用法:

    <script type='text/javascript'>
    document.write( ar.reduceRight(
                    function(a, b, index)
                    { return a +' : '+ b +'='+index; } 
                                  ) );
    </script>

  • 執行結果:

    D : C=2 : B=1 : A=0


©2008-2009 by ant2legs, All Rights Reserved. ant2legs 擁有其製作的文章,圖片與程式的著作權,所有權利保留。