mockjs2
Version:
生成随机数据 & 拦截 Ajax 请求 mod版
116 lines (102 loc) • 2.88 kB
JavaScript
/*
## Helpers
*/
var Util = require('../util')
module.exports = {
// 把字符串的第一个字母转换为大写。
capitalize: function(word) {
return (word + '').charAt(0).toUpperCase() + (word + '').substr(1)
},
// 把字符串转换为大写。
upper: function(str) {
return (str + '').toUpperCase()
},
// 把字符串转换为小写。
lower: function(str) {
return (str + '').toLowerCase()
},
// 从数组中随机选取一个元素,并返回。
pick: function pick(arr, min, max) {
// pick( item1, item2 ... )
if (!Util.isArray(arr)) {
arr = [].slice.call(arguments)
min = 1
max = 1
} else {
// pick( [ item1, item2 ... ] )
if (min === undefined) min = 1
// pick( [ item1, item2 ... ], count )
if (max === undefined) max = min
}
if (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)]
// pick( [ item1, item2 ... ], min, max )
return this.shuffle(arr, min, max)
// 通过参数个数判断方法签名,扩展性太差!#90
// switch (arguments.length) {
// case 1:
// // pick( [ item1, item2 ... ] )
// return arr[this.natural(0, arr.length - 1)]
// case 2:
// // pick( [ item1, item2 ... ], count )
// max = min
// /* falls through */
// case 3:
// // pick( [ item1, item2 ... ], min, max )
// return this.shuffle(arr, min, max)
// }
},
/*
打乱数组中元素的顺序,并返回。
Given an array, scramble the order and return it.
其他的实现思路:
// https://code.google.com/p/jslibs/wiki/JavascriptTips
result = result.sort(function() {
return Math.random() - 0.5
})
*/
shuffle: function shuffle(arr, min, max) {
arr = arr || []
var old = arr.slice(0),
result = [],
index = 0,
length = old.length;
for (var i = 0; i < length; i++) {
index = this.natural(0, old.length - 1)
result.push(old[index])
old.splice(index, 1)
}
switch (arguments.length) {
case 0:
case 1:
return result
case 2:
max = min
/* falls through */
case 3:
min = parseInt(min, 10)
max = parseInt(max, 10)
return result.slice(0, this.natural(min, max))
}
},
/*
* Random.order(item, item)
* Random.order([item, item ...])
顺序获取数组中的元素
[JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22)
不支持单独调用!
*/
order: function order(array) {
order.cache = order.cache || {}
if (arguments.length > 1) array = [].slice.call(arguments, 0)
// options.context.path/templatePath
var options = order.options
var templatePath = options.context.templatePath.join('.')
var cache = (
order.cache[templatePath] = order.cache[templatePath] || {
index: 0,
array: array
}
)
return cache.array[cache.index++ % cache.array.length]
}
}