24 lines
698 B
JavaScript
24 lines
698 B
JavaScript
|
"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;
|
||
|
};
|