Array

全くテストしてない

by ethertank

JavaScript

;(function(AP, undefined) {
    "use strict";

/*
          pop : 配列の末尾の要素を要素を削除
         push : 配列の末尾に要素を追加
      reverse : 配列要素の順序を反転
        shift : 配列の先頭の要素を削除
         sort : 配列の並び順を変更
       splice : 配列の要素を置き換え
      unshift : 配列の先頭に要素を追加
   
       concat : 配列を連結
         join : 配列の要素を指定文字列で区切って文字列として連結
        slice : 指定した範囲の配列要素を抜き出す
    
     toSource : 指定された配列を表す配列リテラルを返す。この値は新しい配列を作る際に使用可能。※Object.prototype.toSource の上書き。
     toString : 配列とその要素を表す文字列を返す。※Object.prototype.toString の上書き。
      indexOf : ※済。指定された値と等しい値を持つ最初の(添字の一番小さい)要素の添字を返す。見つからなかったら -1 を返す。
  lastIndexOf : ※済。指定された値と等しい値を持つ最後の(添字の一番大きい)要素の添字を返す。見つからなかったら -1 を返す。
    
      isArray : 与えられた変数が配列であるかどうかを調べる。
       length : 配列の要素数を表す符号なし 32 ビット整数。
        every : 配列要素全てがテスト関数を満たした場合に true を返す
         some : ある配列の少なくとも1つの要素が与えられたテスト関数を満たした場合に true を返す
       filter : 与えられたフィルタリング関数が true を返す配列要素群で新しい配列を生成
      forEach : 配列要素全てに対して関数を呼び出す
          map : 配列要素全てに対して関数を呼び出し、その結果からなる新しい配列を生成
       reduce : 1つの値に還元されるように、配列の2つの値に対し(左から右へ)同時に関数を適用していく
  reduceRight : 1つの値に還元されるように、配列の2つの値に対し(右から左へ)同時に関数を適用していく
*/

    AP.every || (AP.every = function(fn /*,thisObj*/ ) {
        if (typeof fn !== "function") throw new TypeError();
        var thisObj = arguments[1];
        for (var i = 0, len = this.length; i < len; ++i) if (i in this && !fn.call(thisObj, this[i], i, this)) return false;
        return true;
    });


    AP.filter || (AP.filter = function(fn /*, thisObj*/ ) {
        if (typeof fn !== "function") throw new TypeError();
        var res = [],
            thisObj = arguments[1];
        for (var i = 0, len = this.length; i < len; ++i) {
            if (i in this) {
                var val = this[i];
                if (fn.call(thisObj, val, i, this)) res.push(val);
            }
        }
        return res;
    });


    // Modify from MDN https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Array/forEach
    AP.forEach || (AP.forEach = function(fun /*,...