src/cm/media/js/lib/yui/yui3-3.15.0/build/array-extras/array-extras.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('array-extras', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
Adds additional utility methods to the `Y.Array` class.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
@module collection
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
@submodule array-extras
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
var A          = Y.Array,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
    L          = Y.Lang,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
    ArrayProto = Array.prototype;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
Returns the index of the last item in the array that contains the specified
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
value, or `-1` if the value isn't found.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
@method lastIndexOf
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
@param {Array} a Array to search in.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
@param {Any} val Value to search for.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
@param {Number} [fromIndex] Index at which to start searching backwards.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
  Defaults to the array's length - 1. If negative, it will be taken as an offset
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
  from the end of the array. If the calculated index is less than 0, the array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
  will not be searched and `-1` will be returned.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
@return {Number} Index of the item that contains the value, or `-1` if not
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
  found.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
@for Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
A.lastIndexOf = L._isNative(ArrayProto.lastIndexOf) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
    function(a, val, fromIndex) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
        // An undefined fromIndex is still considered a value by some (all?)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
        // native implementations, so we can't pass it unless it's actually
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
        // specified.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
        return fromIndex || fromIndex === 0 ? a.lastIndexOf(val, fromIndex) :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
                a.lastIndexOf(val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
    } :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
    function(a, val, fromIndex) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
        var len = a.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
            i   = len - 1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
        if (fromIndex || fromIndex === 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
            i = Math.min(fromIndex < 0 ? len + fromIndex : fromIndex, len);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
        if (i > -1 && len > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
            for (; i > -1; --i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
                if (i in a && a[i] === val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
                    return i;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
        return -1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
Returns a copy of the input array with duplicate items removed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
Note: If the input array only contains strings, the `Y.Array.dedupe()` method is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
a much faster alternative.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
@method unique
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
@param {Array} array Array to dedupe.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
@param {Function} [testFn] Custom function to use to test the equality of two
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
    values. A truthy return value indicates that the values are equal. A falsy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
    return value indicates that the values are not equal.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
    @param {Any} testFn.a First value to compare.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
    @param {Any} testFn.b Second value to compare.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
    @param {Number} testFn.index Index of the current item in the original
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
        array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
    @param {Array} testFn.array The original array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
    @return {Boolean} _true_ if the items are equal, _false_ otherwise.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
@return {Array} Copy of the input array with duplicate items removed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
A.unique = function (array, testFn) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
    var i       = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
        len     = array.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
        results = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
        j, result, resultLen, value;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
    // Note the label here. It's used to jump out of the inner loop when a value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
    // is not unique.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
    outerLoop: for (; i < len; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
        value = array[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
        // For each value in the input array, iterate through the result array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
        // and check for uniqueness against each result value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
        for (j = 0, resultLen = results.length; j < resultLen; j++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
            result = results[j];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
            // If the test function returns true or there's no test function and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
            // the value equals the current result item, stop iterating over the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
            // results and continue to the next value in the input array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
            if (testFn) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
                if (testFn.call(array, value, result, i, array)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
                    continue outerLoop;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
            } else if (value === result) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
                continue outerLoop;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
        // If we get this far, that means the current value is not already in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
        // the result array, so add it.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
        results.push(value);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
    return results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
Executes the supplied function on each item in the array. Returns a new array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
containing the items for which the supplied function returned a truthy value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
@method filter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
@param {Array} a Array to filter.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
@param {Function} f Function to execute on each item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
@param {Object} [o] Optional context object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
@return {Array} Array of items for which the supplied function returned a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
  truthy value (empty if it never returned a truthy value).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
A.filter = L._isNative(ArrayProto.filter) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
    function(a, f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
        return ArrayProto.filter.call(a, f, o);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
    } :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
    function(a, f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
        var i       = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
            len     = a.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
            results = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
            item;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
        for (; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
            if (i in a) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
                item = a[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
                if (f.call(o, item, i, a)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
                    results.push(item);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
        return results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
The inverse of `Array.filter()`. Executes the supplied function on each item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
Returns a new array containing the items for which the supplied function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
returned `false`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
@method reject
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
@param {Array} a the array to iterate.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
@param {Function} f the function to execute on each item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
@param {object} [o] Optional context object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
@return {Array} The items for which the supplied function returned `false`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
A.reject = function(a, f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
    return A.filter(a, function(item, i, a) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
        return !f.call(o, item, i, a);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
Executes the supplied function on each item in the array. Iteration stops if the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
supplied function does not return a truthy value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
@method every
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
@param {Array} a the array to iterate.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
@param {Function} f the function to execute on each item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
@param {Object} [o] Optional context object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
@return {Boolean} `true` if every item in the array returns `true` from the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
  supplied function, `false` otherwise.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
A.every = L._isNative(ArrayProto.every) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
    function(a, f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
        return ArrayProto.every.call(a, f, o);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
    } :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
    function(a, f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
        for (var i = 0, l = a.length; i < l; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
            if (i in a && !f.call(o, a[i], i, a)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
                return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
        return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
Executes the supplied function on each item in the array and returns a new array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
containing all the values returned by the supplied function.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
@example
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
    // Convert an array of numbers into an array of strings.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
    Y.Array.map([1, 2, 3, 4], function (item) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
      return '' + item;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
    // => ['1', '2', '3', '4']
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
@method map
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
@param {Array} a the array to iterate.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
@param {Function} f the function to execute on each item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
@param {object} [o] Optional context object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
@return {Array} A new array containing the return value of the supplied function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
  for each item in the original array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
A.map = L._isNative(ArrayProto.map) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
    function(a, f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
        return ArrayProto.map.call(a, f, o);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
    } :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
    function(a, f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
        var i       = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
            len     = a.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
            results = ArrayProto.concat.call(a);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
        for (; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
            if (i in a) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
                results[i] = f.call(o, a[i], i, a);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
        return results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
Executes the supplied function on each item in the array, "folding" the array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
into a single value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
@method reduce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
@param {Array} a Array to iterate.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
@param {Any} init Initial value to start with.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
@param {Function} f Function to execute on each item. This function should
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
  update and return the value of the computation. It will receive the following
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
  arguments:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
    @param {Any} f.previousValue Value returned from the previous iteration,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
      or the initial value if this is the first iteration.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
    @param {Any} f.currentValue Value of the current item being iterated.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
    @param {Number} f.index Index of the current item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
    @param {Array} f.array Array being iterated.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
@param {Object} [o] Optional context object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
@return {Any} Final result from iteratively applying the given function to each
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
  element in the array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
A.reduce = L._isNative(ArrayProto.reduce) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
    function(a, init, f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
        // ES5 Array.reduce doesn't support a thisObject, so we need to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
        // implement it manually.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
        return ArrayProto.reduce.call(a, function(init, item, i, a) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
            return f.call(o, init, item, i, a);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
        }, init);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
    } :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
    function(a, init, f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
        var i      = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
            len    = a.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
            result = init;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
        for (; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
            if (i in a) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
                result = f.call(o, result, a[i], i, a);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
        return result;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
Executes the supplied function on each item in the array, searching for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
first item that matches the supplied function.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
@method find
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
@param {Array} a the array to search.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
@param {Function} f the function to execute on each item. Iteration is stopped
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
  as soon as this function returns `true`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
@param {Object} [o] Optional context object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
@return {Object} the first item that the supplied function returns `true` for,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
  or `null` if it never returns `true`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
A.find = function(a, f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
    for (var i = 0, l = a.length; i < l; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
        if (i in a && f.call(o, a[i], i, a)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
            return a[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
    return null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
Iterates over an array, returning a new array of all the elements that match the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
supplied regular expression.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
@method grep
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
@param {Array} a Array to iterate over.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
@param {RegExp} pattern Regular expression to test against each item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
@return {Array} All the items in the array that produce a match against the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
  supplied regular expression. If no items match, an empty array is returned.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
A.grep = function(a, pattern) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
    return A.filter(a, function(item, index) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
        return pattern.test(item);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
Partitions an array into two new arrays, one with the items for which the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
supplied function returns `true`, and one with the items for which the function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
returns `false`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
@method partition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
@param {Array} a Array to iterate over.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
@param {Function} f Function to execute for each item in the array. It will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
  receive the following arguments:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
    @param {Any} f.item Current item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
    @param {Number} f.index Index of the current item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
    @param {Array} f.array The array being iterated.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
@param {Object} [o] Optional execution context.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
@return {Object} An object with two properties: `matches` and `rejects`. Each is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
  an array containing the items that were selected or rejected by the test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
  function (or an empty array if none).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
A.partition = function(a, f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
    var results = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
        matches: [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
        rejects: []
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
    A.each(a, function(item, index) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
        var set = f.call(o, item, index, a) ? results.matches : results.rejects;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
        set.push(item);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
    return results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
Creates an array of arrays by pairing the corresponding elements of two arrays
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
together into a new array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
@method zip
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
@param {Array} a Array to iterate over.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
@param {Array} a2 Another array whose values will be paired with values of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
  first array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
@return {Array} An array of arrays formed by pairing each element of the first
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
  array with an item in the second array having the corresponding index.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
A.zip = function(a, a2) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
    var results = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
    A.each(a, function(item, index) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
        results.push([item, a2[index]]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
    return results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
Flattens an array of nested arrays at any abitrary depth into a single, flat
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
@method flatten
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
@param {Array} a Array with nested arrays to flatten.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
@return {Array} An array whose nested arrays have been flattened.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
@since 3.7.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
A.flatten = function(a) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
    var result = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
        i, len, val;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
    // Always return an array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
    if (!a) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
        return result;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
    for (i = 0, len = a.length; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
        val = a[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
        if (L.isArray(val)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
            // Recusively flattens any nested arrays.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
            result.push.apply(result, A.flatten(val));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
            result.push(val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
    return result;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
}, '@VERSION@', {"requires": ["yui-base"]});