1var baseMatches = require('./_baseMatches'),
2    baseMatchesProperty = require('./_baseMatchesProperty'),
3    identity = require('./identity'),
4    isArray = require('./isArray'),
5    property = require('./property');
6
7/**
8 * The base implementation of `_.iteratee`.
9 *
10 * @private
11 * @param {*} [value=_.identity] The value to convert to an iteratee.
12 * @returns {Function} Returns the iteratee.
13 */
14function baseIteratee(value) {
15  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
16  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
17  if (typeof value == 'function') {
18    return value;
19  }
20  if (value == null) {
21    return identity;
22  }
23  if (typeof value == 'object') {
24    return isArray(value)
25      ? baseMatchesProperty(value[0], value[1])
26      : baseMatches(value);
27  }
28  return property(value);
29}
30
31module.exports = baseIteratee;
32