Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 2x 2x 30x 27x 26x 26x 26x 26x 41x 41x 41x 14x 13x 14x 27x 1x 1x 26x 25x 1x 1x 26x 26x 5x 1x 26x 2x | var $type = require('./type'); var $keyPathSplit = require('../str/keyPathSplit'); /** * 从对象路径取值(简易版) * @method obj/get * @see [lodash.get](https://lodash.com/docs/4.17.15#get) * @param {Object|Array} obj 要取值的对象或者数组 * @param {String} xpath 要取值的路径 * @param {Any} [defaultValue] 值为 undefined 则取此默认值 * @returns {Any} 取得的值 * @example * var $get = require('@spore-ui/kit/packages/obj/get'); * var obj = {a: {b: {c: 1}}}; * console.info($get(obj, 'a.b.c'); // 1 * console.info($get(obj, 'e'); // undefined * console.info($get(obj, 'e', 3); // 3 * var arr = [1, {a: [2, 3]}]; * console.info($get(arr, '[1].a[1]'); // 3 */ // 引用 lodash/get 会引入超过10kb 代码,用这个方法来精简 sdk 体积 function get(obj, xpath, def) { if (!obj) return undefined; if (typeof xpath !== 'string') return undefined; var arrXpath = $keyPathSplit(xpath); var point = obj; var len = arrXpath.length; var index; for (index = 0; index < len; index += 1) { var key = arrXpath[index]; var otype = $type(point); if (otype === 'array') { if (/^\d+$/.test(key)) { key = parseInt(key, 10); } point = point[key]; } else if (point === null) { point = undefined; break; } else if (typeof point === 'object') { point = point[key]; } else { point = undefined; break; } } var value = point; if ($type(value) === 'undefined') { if ($type(def) !== 'undefined') { value = def; } } return value; } module.exports = get; |