foop
Version:
interfaces that describe their intentions.
60 lines (59 loc) • 3.72 kB
JavaScript
// /**
// * get attribute from path, return undefined when no such path
// * @param {Object} obj
// * @param {String} path like: 'a.b.c.0.e'
// * @return {any}
// */
// const get = (obj, path, defaultValue) => {
// if (!isPlainObject(obj) && !isArray(obj)) return undefined
// if (!path) return obj
// //compatible with lodash style
// path = path.replace(/\[|\]\./g, '.')
//
// let pathArray = path.split('.')
// let p;
// let v = obj;
// while ((p = pathArray.shift())) {
// v = v[p]
// if (isUndefined(v)) return defaultValue
// }
// return v
// }
//
// const set = (obj, path, value) => {
// if (!isPlainObject(obj)) return undefined
//
// //compatible with lodash style
// path = path.replace(/\[|\]\./g, '.')
//
// let pathArray = path.split('.')
// let p;
// let v = obj;
//
// for (let i = 0; i < pathArray.length; i++) {
// let p = pathArray[i]
// if (i >= pathArray.length - 1) {
// v[p] = value
// } else {
// if (isUndefined(v[p])) v[p] = {}
// }
// v = v[p]
// }
// return obj
// }
//
// const pick = (obj, keys) => {
// if (!isPlainObject(obj) || !isArray(keys)) return obj
// return keys.map(path => {
// const value = get(obj, path)
// const key = last(path.split('.'))
// return {
// key,
// value
// }
// }).reduce((memo, o) => {
// memo[o.key] = o.value
// return memo
// }, {})
// }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FubmlmZS5qcyIsInNvdXJjZXMiOlsic2FubmlmZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAvKipcbi8vICAqIGdldCBhdHRyaWJ1dGUgZnJvbSBwYXRoLCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gbm8gc3VjaCBwYXRoXG4vLyAgKiBAcGFyYW0gIHtPYmplY3R9IG9ialxuLy8gICogQHBhcmFtICB7U3RyaW5nfSBwYXRoIGxpa2U6ICdhLmIuYy4wLmUnXG4vLyAgKiBAcmV0dXJuIHthbnl9XG4vLyAgKi9cbi8vIGNvbnN0IGdldCA9IChvYmosIHBhdGgsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuLy8gICBpZiAoIWlzUGxhaW5PYmplY3Qob2JqKSAmJiAhaXNBcnJheShvYmopKSByZXR1cm4gdW5kZWZpbmVkXG4vLyAgIGlmICghcGF0aCkgcmV0dXJuIG9ialxuLy8gICAgIC8vY29tcGF0aWJsZSB3aXRoIGxvZGFzaCBzdHlsZVxuLy8gICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXFt8XFxdXFwuL2csICcuJylcbi8vXG4vLyAgIGxldCBwYXRoQXJyYXkgPSBwYXRoLnNwbGl0KCcuJylcbi8vICAgbGV0IHA7XG4vLyAgIGxldCB2ID0gb2JqO1xuLy8gICB3aGlsZSAoKHAgPSBwYXRoQXJyYXkuc2hpZnQoKSkpIHtcbi8vICAgICB2ID0gdltwXVxuLy8gICAgIGlmIChpc1VuZGVmaW5lZCh2KSkgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuLy8gICB9XG4vLyAgIHJldHVybiB2XG4vLyB9XG4vL1xuLy8gY29uc3Qgc2V0ID0gKG9iaiwgcGF0aCwgdmFsdWUpID0+IHtcbi8vICAgaWYgKCFpc1BsYWluT2JqZWN0KG9iaikpIHJldHVybiB1bmRlZmluZWRcbi8vXG4vLyAgIC8vY29tcGF0aWJsZSB3aXRoIGxvZGFzaCBzdHlsZVxuLy8gICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXFt8XFxdXFwuL2csICcuJylcbi8vXG4vLyAgIGxldCBwYXRoQXJyYXkgPSBwYXRoLnNwbGl0KCcuJylcbi8vICAgbGV0IHA7XG4vLyAgIGxldCB2ID0gb2JqO1xuLy9cbi8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoQXJyYXkubGVuZ3RoOyBpKyspIHtcbi8vICAgICBsZXQgcCA9IHBhdGhBcnJheVtpXVxuLy8gICAgIGlmIChpID49IHBhdGhBcnJheS5sZW5ndGggLSAxKSB7XG4vLyAgICAgICB2W3BdID0gdmFsdWVcbi8vICAgICB9IGVsc2Uge1xuLy8gICAgICAgaWYgKGlzVW5kZWZpbmVkKHZbcF0pKSB2W3BdID0ge31cbi8vICAgICB9XG4vLyAgICAgdiA9IHZbcF1cbi8vICAgfVxuLy8gICByZXR1cm4gb2JqXG4vLyB9XG4vL1xuLy8gY29uc3QgcGljayA9IChvYmosIGtleXMpID0+IHtcbi8vICAgaWYgKCFpc1BsYWluT2JqZWN0KG9iaikgfHwgIWlzQXJyYXkoa2V5cykpIHJldHVybiBvYmpcbi8vICAgcmV0dXJuIGtleXMubWFwKHBhdGggPT4ge1xuLy8gICAgIGNvbnN0IHZhbHVlID0gZ2V0KG9iaiwgcGF0aClcbi8vICAgICBjb25zdCBrZXkgPSBsYXN0KHBhdGguc3BsaXQoJy4nKSlcbi8vICAgICByZXR1cm4ge1xuLy8gICAgICAga2V5LFxuLy8gICAgICAgdmFsdWVcbi8vICAgICB9XG4vLyAgIH0pLnJlZHVjZSgobWVtbywgbykgPT4ge1xuLy8gICAgIG1lbW9bby5rZXldID0gby52YWx1ZVxuLy8gICAgIHJldHVybiBtZW1vXG4vLyAgIH0sIHt9KVxuLy8gfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9