UNPKG

availity-ekko

Version:

Mock server simulating Availity API rest services

105 lines (89 loc) 1.98 kB
var _ = require('lodash'); var utils = { /** * Get/set the value of a nested property * * Usage: * * var obj = { * a: { * b: { * c: { * d: ['e', 'f', 'g'] * } * } * } * }; * * // Get deep value * deep(obj, 'a.b.c.d[2]'); // 'g' * * // Set deep value * deep(obj, 'a.b.c.d[2]', 'george'); * * // Get the deep value * deep(obj, 'a.b.c.d[2]'); // 'george' * * @param {[type]} obj [description] * @param {[type]} key [description] * @param {[type]} value [description] * @return {[type]} [description] */ deep: function(_obj, _key, _value) { var keys = _key.replace(/\[(["']?)([^\1]+?)\1?\]/g, '.$2').replace(/^\./, '').split('.'); var root; var i = 0; var n = keys.length; var key; var obj = _obj; var value = _value; // Set deep value if (arguments.length > 2) { root = obj; n--; while (i < n) { key = keys[i++]; obj = obj[key] = _.isObject(obj[key]) ? obj[key] : {}; } obj[keys[i]] = value; value = root; // Get deep value } else { while ((obj = obj[keys[i++]]) !== null && i < n) { if (!obj) { break; } continue; } value = i < n ? void 0 : obj; } return value; }, /** * Extracts a deeply nested properties from an object or array. * * Usage: * * var arr = [{ * deeply: { * nested: 'foo' * } * }, { * deeply: { * nested: 'bar' * } * }]; * pluckDeep(arr, 'deeply.nested'); // ['foo', 'bar'] * * @param {Object} obj Object * @param {String} key seperated by '.' * @return {Array} Array of values matching key */ pluckDeep: function(obj, key) { var self = this; return _.map(obj, function(value) { return self.deep(value, key); }); } }; module.exports = utils;