| "use strict"; |
| |
| var isPlainArray = require("../../is-plain-array") |
| , callable = require("../../../object/valid-callable") |
| , isArray = Array.isArray |
| , filter = Array.prototype.filter |
| , forEach = Array.prototype.forEach |
| , call = Function.prototype.call; |
| |
| module.exports = function (callbackFn /*, thisArg*/) { |
| var result, thisArg, i; |
| if (!this || !isArray(this) || isPlainArray(this)) { |
| return filter.apply(this, arguments); |
| } |
| callable(callbackFn); |
| thisArg = arguments[1]; |
| result = new this.constructor(); |
| i = 0; |
| forEach.call(this, function (val, j, self) { |
| if (call.call(callbackFn, thisArg, val, j, self)) result[i++] = val; |
| }); |
| return result; |
| }; |