1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
| /**
| * Array#filter.
| *
| * @param {Array} arr
| * @param {Function} fn
| * @param {Object=} self
| * @return {Array}
| * @throw TypeError
| */
|
| module.exports = function (arr, fn, self) {
| if (arr.filter) return arr.filter(fn, self);
| if (void 0 === arr || null === arr) throw new TypeError;
| if ('function' != typeof fn) throw new TypeError;
| var ret = [];
| for (var i = 0; i < arr.length; i++) {
| if (!hasOwn.call(arr, i)) continue;
| var val = arr[i];
| if (fn.call(self, val, i, arr)) ret.push(val);
| }
| return ret;
| };
|
| var hasOwn = Object.prototype.hasOwnProperty;
|
|