heyujie
2021-05-20 6ebdefb4a5b2be82a8c452c0bb4624f3d85a17b7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
"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;
};