123456789101112131415161718192021222324252627282930 |
- 'use strict';
- var uncurryThis = require('../internals/function-uncurry-this');
- var isArray = require('../internals/is-array');
- var isCallable = require('../internals/is-callable');
- var classof = require('../internals/classof-raw');
- var toString = require('../internals/to-string');
-
- var push = uncurryThis([].push);
-
- module.exports = function (replacer) {
- if (isCallable(replacer)) return replacer;
- if (!isArray(replacer)) return;
- var rawLength = replacer.length;
- var keys = [];
- for (var i = 0; i < rawLength; i++) {
- var element = replacer[i];
- if (typeof element == 'string') push(keys, element);
- else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));
- }
- var keysLength = keys.length;
- var root = true;
- return function (key, value) {
- if (root) {
- root = false;
- return value;
- }
- if (isArray(this)) return value;
- for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;
- };
- };
|