'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; };