text: "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;
  };
  