mockjs2
Version:
生成随机数据 & 拦截 Ajax 请求 mod版
126 lines (118 loc) • 4.1 kB
JavaScript
/*
## Basics
*/
module.exports = {
// 返回一个随机的布尔值。
boolean: function(min, max, cur) {
if (cur !== undefined) {
min = typeof min !== 'undefined' && !isNaN(min) ? parseInt(min, 10) : 1
max = typeof max !== 'undefined' && !isNaN(max) ? parseInt(max, 10) : 1
return Math.random() > 1.0 / (min + max) * min ? !cur : cur
}
return Math.random() >= 0.5
},
bool: function(min, max, cur) {
return this.boolean(min, max, cur)
},
// 返回一个随机的自然数(大于等于 0 的整数)。
natural: function(min, max) {
min = typeof min !== 'undefined' ? parseInt(min, 10) : 0
max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53
return Math.round(Math.random() * (max - min)) + min
},
// 返回一个随机的整数。
integer: function(min, max) {
min = typeof min !== 'undefined' ? parseInt(min, 10) : -9007199254740992
max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53
return Math.round(Math.random() * (max - min)) + min
},
int: function(min, max) {
return this.integer(min, max)
},
// 返回一个随机的浮点数。
float: function(min, max, dmin, dmax) {
dmin = dmin === undefined ? 0 : dmin
dmin = Math.max(Math.min(dmin, 17), 0)
dmax = dmax === undefined ? 17 : dmax
dmax = Math.max(Math.min(dmax, 17), 0)
var ret = this.integer(min, max) + '.';
for (var i = 0, dcount = this.natural(dmin, dmax); i < dcount; i++) {
ret += (
// 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。
(i < dcount - 1) ? this.character('number') : this.character('123456789')
)
}
return parseFloat(ret, 10)
},
// 返回一个随机字符。
character: function(pool) {
var pools = {
lower: 'abcdefghijklmnopqrstuvwxyz',
upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
number: '0123456789',
symbol: '!@#$%^&*()[]'
}
pools.alpha = pools.lower + pools.upper
pools['undefined'] = pools.lower + pools.upper + pools.number + pools.symbol
pool = pools[('' + pool).toLowerCase()] || pool
return pool.charAt(this.natural(0, pool.length - 1))
},
char: function(pool) {
return this.character(pool)
},
// 返回一个随机字符串。
string: function(pool, min, max) {
var len
switch (arguments.length) {
case 0: // ()
len = this.natural(3, 7)
break
case 1: // ( length )
len = pool
pool = undefined
break
case 2:
// ( pool, length )
if (typeof arguments[0] === 'string') {
len = min
} else {
// ( min, max )
len = this.natural(pool, min)
pool = undefined
}
break
case 3:
len = this.natural(min, max)
break
}
var text = ''
for (var i = 0; i < len; i++) {
text += this.character(pool)
}
return text
},
str: function( /*pool, min, max*/ ) {
return this.string.apply(this, arguments)
},
// 返回一个整型数组。
range: function(start, stop, step) {
// range( stop )
if (arguments.length <= 1) {
stop = start || 0;
start = 0;
}
// range( start, stop )
step = arguments[2] || 1;
start = +start
stop = +stop
step = +step
var len = Math.max(Math.ceil((stop - start) / step), 0);
var idx = 0;
var range = new Array(len);
while (idx < len) {
range[idx++] = start;
start += step;
}
return range;
}
}