Skip to content

Instantly share code, notes, and snippets.

@wilsoncook
Last active September 9, 2016 06:19
Show Gist options
  • Save wilsoncook/24049a6662aad23807342f244d02aa6d to your computer and use it in GitHub Desktop.
Save wilsoncook/24049a6662aad23807342f244d02aa6d to your computer and use it in GitHub Desktop.
对象多级获取/设置值
/**
* 设置或获取某对象的多级属性
* @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