Last active
September 9, 2016 06:19
-
-
Save wilsoncook/24049a6662aad23807342f244d02aa6d to your computer and use it in GitHub Desktop.
对象多级获取/设置值
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 设置或获取某对象的多级属性 | |
* @param {[type]} obj [可选]要设置或获取的对象,默认为空对象 | |
* @param {[type]} key 获取或设置的键名 | |
* @param {[type]} value 若为undefined则表示获取值,!undefined表示设置值 | |
* @param {[type]} defaultValue 默认值,当获取值时,若值不存在则返回defaultValue | |
* @return {[type]} 当为设置时,返回obj本身,为获取时,返回对应属性值 | |
*/ | |
function getsetObject (obj, key, value, defaultValue) { | |
obj = obj || {}; | |
var isSet = 'undefined' != typeof value, | |
parts = (key + '').split('.'), | |
len = isSet ? parts.length - 1 : parts.length, | |
ref = obj; | |
for (var i = 0; i < len; i++) { | |
if ('undefined' != typeof parts[i + 1]) { | |
if (ref[parts[i]] && !('object' == typeof ref[parts[i]])) { throw new Error(parts[i] + '不是一个对象,其下属性不可读写'); } | |
if (!ref[parts[i]]) { ref[parts[i]] = {}; } //上一级初始化为对象 | |
} | |
ref = ref[parts[i]]; | |
} | |
if (isSet) { | |
ref[parts[i]] = value; | |
return obj; | |
} else { | |
return 'undefined' == typeof ref ? defaultValue : ref; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment