'use strict'; 
 | 
var uncurryThis = require('../internals/function-uncurry-this'); 
 | 
var aCallable = require('../internals/a-callable'); 
 | 
var isNullOrUndefined = require('../internals/is-null-or-undefined'); 
 | 
var lengthOfArrayLike = require('../internals/length-of-array-like'); 
 | 
var toObject = require('../internals/to-object'); 
 | 
var MapHelpers = require('../internals/map-helpers'); 
 | 
var iterate = require('../internals/map-iterate'); 
 | 
  
 | 
var Map = MapHelpers.Map; 
 | 
var mapHas = MapHelpers.has; 
 | 
var mapSet = MapHelpers.set; 
 | 
var push = uncurryThis([].push); 
 | 
  
 | 
// `Array.prototype.uniqueBy` method 
 | 
// https://github.com/tc39/proposal-array-unique 
 | 
module.exports = function uniqueBy(resolver) { 
 | 
  var that = toObject(this); 
 | 
  var length = lengthOfArrayLike(that); 
 | 
  var result = []; 
 | 
  var map = new Map(); 
 | 
  var resolverFunction = !isNullOrUndefined(resolver) ? aCallable(resolver) : function (value) { 
 | 
    return value; 
 | 
  }; 
 | 
  var index, item, key; 
 | 
  for (index = 0; index < length; index++) { 
 | 
    item = that[index]; 
 | 
    key = resolverFunction(item); 
 | 
    if (!mapHas(map, key)) mapSet(map, key, item); 
 | 
  } 
 | 
  iterate(map, function (value) { 
 | 
    push(result, value); 
 | 
  }); 
 | 
  return result; 
 | 
}; 
 |