UNPKG

foop

Version:

interfaces that describe their intentions.

49 lines (43 loc) 3.62 kB
var isObj = require('../is/obj') var getPathSegments = require('./segments') var isDottable = require('./dottable') /** * @name dot.has * @memberOf dot * @func * @since 3.0.0 * @extends dot/getPathSegments * * @param {Object} obj the object to retrieve the nested property from. * @param {Dottable | string | Array} path dot-prop-path to use * @return {boolean} has at path * * {@link https://github.com/jashkenas/underscore/blob/master/underscore.js#L1369 underscore-has} * @see {@link underscore-has} * * @example * * dot.has({a: {b: 2}}, 'a.b'); //=> true * dot.has({a: {b: 2}}, ['a', 'b']); //=> true * dot.has({c: {b: 2}}, ['a', 'b']); //=> undefined * */ module.exports = function dotHas(obj, path) { if (!isDottable(obj, path)) { return false } var pathArr = getPathSegments(path) for (var i = 0; i < pathArr.length; i++) { if (isObj(obj)) { if (!(pathArr[i] in obj)) { return false } obj = obj[pathArr[i]] } else { return false } } return true } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLmpzIiwic291cmNlcyI6WyJoYXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaXNPYmogPSByZXF1aXJlKCcuLi9pcy9vYmonKVxuY29uc3QgZ2V0UGF0aFNlZ21lbnRzID0gcmVxdWlyZSgnLi9zZWdtZW50cycpXG5jb25zdCBpc0RvdHRhYmxlID0gcmVxdWlyZSgnLi9kb3R0YWJsZScpXG5cbi8qKlxuICogQG5hbWUgZG90Lmhhc1xuICogQG1lbWJlck9mIGRvdFxuICogQGZ1bmNcbiAqIEBzaW5jZSAzLjAuMFxuICogQGV4dGVuZHMgZG90L2dldFBhdGhTZWdtZW50c1xuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb2JqIHRoZSBvYmplY3QgdG8gcmV0cmlldmUgdGhlIG5lc3RlZCBwcm9wZXJ0eSBmcm9tLlxuICogQHBhcmFtICB7RG90dGFibGUgfCBzdHJpbmcgfCBBcnJheX0gcGF0aCBkb3QtcHJvcC1wYXRoIHRvIHVzZVxuICogQHJldHVybiB7Ym9vbGVhbn0gaGFzIGF0IHBhdGhcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL2Jsb2IvbWFzdGVyL3VuZGVyc2NvcmUuanMjTDEzNjkgdW5kZXJzY29yZS1oYXN9XG4gKiBAc2VlIHtAbGluayB1bmRlcnNjb3JlLWhhc31cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgIGRvdC5oYXMoe2E6IHtiOiAyfX0sICdhLmInKTsgLy89PiB0cnVlXG4gKiAgICBkb3QuaGFzKHthOiB7YjogMn19LCBbJ2EnLCAnYiddKTsgLy89PiB0cnVlXG4gKiAgICBkb3QuaGFzKHtjOiB7YjogMn19LCBbJ2EnLCAnYiddKTsgLy89PiB1bmRlZmluZWRcbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZG90SGFzKG9iaiwgcGF0aCkge1xuICBpZiAoIWlzRG90dGFibGUob2JqLCBwYXRoKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgcGF0aEFyciA9IGdldFBhdGhTZWdtZW50cyhwYXRoKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aEFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpc09iaihvYmopKSB7XG4gICAgICBpZiAoIShwYXRoQXJyW2ldIGluIG9iaikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIG9iaiA9IG9ialtwYXRoQXJyW2ldXVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDbENBLEdBQUssQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUM3Q0EsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCeEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO0VBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO0lBQzFCLE9BQU8sS0FBSztHQUNiOztFQUVEQSxHQUFLLENBQUMsT0FBTyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7O0VBRXJDLEtBQUtDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3ZDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ2QsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sS0FBSztPQUNiOztNQUVELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3RCO1NBQ0k7TUFDSCxPQUFPLEtBQUs7S0FDYjtHQUNGOztFQUVELE9BQU8sSUFBSTtDQUNaOyJ9