landers.parse-arguments
Version:
landers.parse-arguments
65 lines (58 loc) • 1.77 kB
JavaScript
;(function (root, jQuery, factory) {
if (typeof exports === 'object' && typeof module !== 'undefined') {
// CommonJS、CMD规范检查
module.exports = factory(jQuery);
} else if (typeof define === 'function' && define.amd) {
// AMD规范检查
define(factory);
} else {
root.Landers = root.Landers || {};
// 浏览器注册全局对象
Landers.parseArgs = factory(jQuery);
}
})(this, jQuery, (function ($) {
function get_type(xvar){
if (xvar instanceof $) {
return 'jobject';
}
if ($.isPlainObject(xvar)) {
return 'json';
}
if ($.isArray(xvar)) {
return 'array';
}
return typeof xvar;
}
return function(args, maps){
var ret = {}, enums;
maps = maps || {};
//找出enum项
for(var k in maps) {
var arr = k.match(/^__ENUM:(.*)$/);
if (arr) {
enums = enums || {};
enums[k] = eval('(' + arr[1] + ')');
}
}
for (var i=0; i<args.length; i++) {
var type = get_type(args[i]);
if (enums && (type == 'string' || type == 'number')) {
var tmp = false;
for (var j in enums) {
if ($.inArray(args[i], enums[j])) {
ret[maps[j]] = args[i];
delete enums[j];
tmp = true;
}
}
if (tmp) continue;
}
if (maps[type]) {
ret[maps[type]] = args[i];
} else {
ret[type] = args[i];
}
};
return ret;
}
}));