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