http://jsl.solomon-yu.cn/JSE/
jsExtension实现类型C#的Linq功能
更新日志 | 查看更新日志 |
---|---|
文件 | jsExtension.js jsExtension.min.js jsExtensionTest.js |
全局公用常量及函数(所有线程共用) | ||
---|---|---|
函数 | 备注 | 使用示例 |
$$.enumeration.roundType | round函数进入舍入的规则 | rounding:四舍五入 floor:向下取整 ceiling:上向取整 |
$$.enumeration.orderDirection | 排序方向 | asc:正序 desc:反序 |
$$.CONST.minInt | int最小值 | -2147483648 |
$$.CONST.maxInt | int最大值 | 2147483647 |
$$.CONST.minDate | 最小日期 | 1900-01-01 00:00:00 |
$$.CONST.maxDate | 最大日期 | 2100-12-31 23:59:59 |
$$(JS扩展总入口) | ||
---|---|---|
函数 | 备注 | 使用示例 |
createJSE() | 创建一个JS扩展,如果在多线程中使用JS扩展不能直接使用$$,需要在每一个线程中创建扩展函数的一个实例 | var jse = $$.createJSE(); |
oe(data) | 创建一个objectExtension扩展实例 | var oaTest = $$.oe(data); |
soe(data) | 从object扩展池中获取一个object扩展,如果object扩展池中没有实例,则创建一个,并将新创建的实例加入池中 | var oaTest = $$.soe(data); |
ae(data) | 创建一个arrayExtension数组扩展实例 | var aeTest = $$.ae([]); |
sae(data) | 从数组扩展池中获取一个数组扩展实例,如果数组扩展池中没有实例,则创建一个,并将新创建的实例加入池中 | var aeTest = $$.sae([]); |
oa(data) | 创建一个orderedArray实例 | var oaTest = $$.oa([]); |
soa(data) | 从orderedArray池中获取一个orderedArray实例,如果池中没有实例,则创建一个,并将新创建的实例加入池中 | var oaTest = $$.soa([]); |
sb(data) | 创建一个stringBuilder扩展实例 | var sbTest = $$.sb(""); |
ssb(data) | 从stringBuilder池中获取一个stringBuilder,如果stringBuilder池中没有实例,则创建一个,并将新创建的实例加入池中 | var sbTest = $$.ssb(data); |
de(data) | 创建一个dateExtension日期扩展实例 | var de = $$.de(data); |
sde(data) | 从日期扩展池中获取一个日期扩展,如果日期扩展池中没有实例,则创建一个,并将新创建的实例加入池中 | var de = $$.sde(data); |
ocf(func, interval) | onceCallFunction在一定时间内只触发一次调用 | var ocf = $$.ocf({ func: function () { console.log(1); }, 500); var ocf = $$.ocf(function () { console.log(1); }, interval: 500, invokeTime: "timeout" });//指定为timeout时调用call不会触发,会在interval毫秒后执行,不指定该参数为atonce ocf.call();//500毫秒内不论触发多少次都只会执行一次 |
dictionary(data) | 创建一个键值对实例 | var dictionary = $$.dictionary(data); |
compare(a, b, ignoreCase) | 比较两个值的大小,如果a > b返回值大于0,如果a == b返回值等于0,如果a < b返回值小于0;注:如果a、b都为数字则按值比较,反之按字符串比较 | $$.compare(1, 2):-1 $$.compare('abc', 'ABC', true):0 |
isNullOrUndefined(checkData) | 是否为null或undefinded | $$.isNullOrUndefined("1231"):false |
isNullOrEmpty(checkData) | 是否为null或空 | $$.isNullOrEmpty(""):true |
isNullOrWhiteSpace(checkData) | 是否为null或空白字符串 | $$.isNullOrEmpty(" "):true |
isObject(checkData) | 对象是否是object类型 | $$.isObject({}):true |
isString(checkData) | 对象是否是string类型 | $$.isObject(""):true |
deepCopy(source, ignoreKeyList) | 深度拷贝,ignoreKeyList为需要忽略的属性 | var obj = $$.deepCopy({ a: 1, b: [1, 2] }); |
extend() | 扩展对象,拷贝于jQuery | var obj = $$.extend({}, { a: 1 }); |
getRandomString(length) | 生成随机字符串 | var str = $$.getRandomString(10); |
getHost() | 取得当前页面路径的HOST | |
getAbsolutePath(url) | 取得当前页面的绝对路径,如果传入了url参数则从该参数中获取 | |
getUrl() | 取得当前页面的全路径 | |
getRawUrl() | 取得当前页面的原始路径 | |
getUrlParam(name, search) | 从当前页面的QueryString或search中取得名为name的参数值 | |
getUrlParams(search) | 从当前页面或search取得参数列表,返回{ name: '', value: '' }数组 | |
htmlEncode(data) | 对数据进行HTML编码 | |
htmlDecode(data) | 对数据进行HTML解码 | |
urlEncode(data) | 对数据进行URL编码 | |
urlDecode(data) | 对数据进行URL解码 | |
format(format, params) | 将指定字符串中的一个或多个格式项替换为指定对象的字符串表示形式 | $$.format("{0}{1}", "a", "b"):ab |
isInt(checkData) | 是否是int值 | $$.isInt("1234"):true $$.isInt("-1234"):true $$.isInt("a1234"):false |
isNum(checkData) | 是否是纯数字 | $$.isNum("1234"):true $$.isNum("-1234"):false |
isFloat(checkData) | 是否是浮点数 | $$.isFloat("1234"):true $$.isFloat("1234.12"):true $$.isFloat("a1234"):false |
isBool(checkData) | 是否是bool类型 | $$.isBool(true):true $$.isBool(false):true $$.isBool("true"):false |
isEnumerable(checkData) | 是否可以枚举 | |
isArray(checkData) | 是否是数组 | |
isDate(checkData) | 是否是日期 | |
isDateTime(checkData) | 是否是包含时间的日期 | |
getDateTimeMonthDayCount(date) | 取得日期当月天数 | $$.getDateTimeMonthDayCount("2016-02-20"):29 |
formatDateTime(date, format) | 格式化日期 | $$.formatDateTime("2018-09-12 09:26:35", "yyyy-MM-dd HH:mm:ss"):2018-09-12 09:26:35 $$.formatDateTime("2018-09-12 09:26:35", "yy-M-d H:m:s"):18-9-12 9:26:35 |
isFunction(checkData) | 是否是函数 | |
isTel(checkData) | 是否是电话 | |
isMobile(checkData) | 是否是手机号 | |
isEmail(checkData) | 是否是邮件 | |
isIdCard(checkData) | 是否是身份证 | |
isNumAndEnglishCharactor(checkData) | 是否仅包含数字和英文字母 | |
getFileExtension(fileName) | 取得文件的类型 | $$.getFileExtension("abc.xlsx"):.xlsx |
random(min, max) | 取得min到max之前的随机数 | |
cookie(key, value, options) | 设置或取得cookie值 | $$.cookie("redirect_url_after_pay", parent.location.href, { path: "/" }); |
session(key, value) | 设置或取得session值,关闭浏览器失效 | |
storage(key, value) | 设置或取得storage值,不清除缓存一直有效 | |
md5(str) | md5加密 | $$.md5("123456"):e10adc3949ba59abbe56e057f20f883e |
generateId() | 生成一个GUID格式的字符串 |
objectExtension(object扩展) | ||
---|---|---|
函数 | 备注 | 使用示例 |
setData(data) | 设置数据 | $$.soe(data).setData(data); |
equals(comareObj, func) | 比较对象是否相等,func用于构造比较字段,如果未传入func参数则直接比较两个对象 | $$.soe({a: 1, b: 2}).equals({a: 2, b: 2}, function (x) { return x.a; }):false $$.soe({a: 1, b: 2}).equals({a: 2, b: 2}, x => x.b):true |
toString(defaultValue, maxLength, appendStr) | 将对象转换为字符串,如果对象为空或undefinded则返回defaultValue,如果字符串长度超过maxLength则截断,并以appendStr结尾 | $$.soe("abcdefgehi").toString("", 5, "..."):abcde... |
contains(checkValue, ignoreCase) | 字符串是否包含某字符串 | $$.soe("abce").contains("abc"):true |
toInt(defaultValue) | 转换为int值 | $$.soe("123").toInt(0):123 |
toFloat(defaultValue) | 转换为float值 | $$.soe("123.23").toFloat(0):123.23 |
round(decimals, roundType) | 按给定的小数位四舍五入 | $$.soe(123.23535).round(2):123.24 $$.soe(123.23535).round(2, $$.enumeration.roundType.floor):123.23 |
toBool(defaultValue) | 转换为bool值,如果是值类型,大于0返回true,其余返回false;如果是其它类型,先转换为字符串,如果$$.compare("true", true) == 0返回true,其它返回false | $$.soe(1).toBool():true $$.soe("tRuE").toBool():true |
toDateTime(defaultValue) | 转换为时间对象 | $$.soe("2018-09-15 17:42:00").toDateTime(); |
replaceAll(oldStr, newStr) | 替换所有字符串 | $$.soe("abceefgabcd").replaceAll("abc", "111"):111eefg111d |
startWith(checkData) | 字符串是否以某字符串开头 | $$.soe("abcde").startWith("abc"):true |
trimLeft() | 移除开始字符串,可以接收无数个参数 | $$.soe("abcde").trimLeft("a", "b"):cde |
endWith(checkData) | 字符串是否以某字符串结尾 | $$.soe("abcde").endWith("abc"):false |
trimRight() | 移除结尾字符串,可以接收无数个参数 | $$.soe("abcde").trimRight("d", "e"):abc |
test(regular) | 是否满足正则表达式 | $$.soe("13435").test(/^d+$/):true |
toArray() | 转换为数组 | $$.soe("133").toArray():['1', '2', '3'] |
arrayExtension(数组扩展) | ||
---|---|---|
函数 | 备注 | 使用示例 |
isDataValid() | 数据是否是合法的数组 | $$.sae([]).isDataValid(); |
setData(data) | 设置数据 | $$.sae(['a', 'b', 'c']).setData([1, 2, 3]); |
hasItem(func) | 是否包含某元素 | $$.sae(['a', 'b', 'c']).hasItem('a'):true $$.sae([{ a: 1}, { a: 2 }]).hasItem(x => x.a == 1):true |
all(func) | 确定序列中的所有元素是否满足条件 | $$.sae([1, 2, 3]).all(x => x > 0):true |
any(func) | 确定序列中是否存在满足条件的元素 | $$.sae([1, 2, 3]).any(x => x > 0):true |
contains(checkData) | 确定序列中是否包含某元素 | $$.sae([1, 2, 3]).contains(1):true |
findAll(func) | 查找所有符合条件的元素 | $$.sae([1, 2, 3]).findAll(x => x > 1).toArray():[2, 3] |
select(func) | 将序列中的每个元素投影到新表中 | $$.sae([{ a:1, b: 2}, { a: 2, b:3 }]).select(x => x.a).toArray():[1, 2] |
add(data) | 在尾部添加元素 | $$.sae([1, 2]).add(3).toArray():[1, 2, 3] |
remove(func) | 删除符合条件的元素 | $$.sae([1, 2, 3]).remove(x => x > 2).toArray():[1, 2] |
removeAt(index) | 删除某位置的元素 | $$.sae([1, 2, 3]).removeAt(2).toArray():[1, 2] |
skip(count) | 跳过前count个元素 | $$.sae([1, 2, 3]).skip(1).toArray():[2, 3] |
skipWhile(func) | 跳过前面所有符合要求的元素,直到第一个不符合的元素为止 | $$.sae([1, 2, 3]).skipWhile(x => x < 2).toArray():[2, 3] |
take(count) | 截取前count个元素 | $$.sae([1, 2, 3]).take(2).toArray():[1, 2] |
takeWhile(func) | 截取前面所有符合要求的元素,直到第一个不符合的元素为止 | $$.sae([1, 2, 3]).takeWhile(x => x < 3).toArray():[1, 2] |
toPaginated(pageIndex, pageSize) | 分页取得数据 | $$.sae([1, 2, 3, 4]).toPaginated(2, 2).toArray():[3, 4] |
distinct() | 去重 | $$.sae([1, 1, 2, 2]).distinct().toArray():[1, 2] |
distinctBy(func) | 按条件去重 | $$.sae([{ a: 1, b: 2}, { a: 1, b: 3}]).distinctBy(x => x.a).toArray():[{ a: 1, b: 2 }] |
hasRepeatItem() | 是否有重复元素 | $$.sae([1, 2]).hasRepeatItem():false |
hasRepeatItemBy(func) | 按条件判断是否存在重复元素 | $$.sae([{ a: 1, b: 2}, { a: 1, b: 3}]).hasRepeatItemBy(x => x.a):true |
findIndex(func) | 查找第一个符合条件元素的位置 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).findIndex(x => x.a == 2):1 |
findLastIndex(func) | 查找最后一个符合条件元素的位置 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).findLastIndex(x => x.a == 2):1 |
firstOrDefault(func) | 查找第一个符合条件的元素,如果没有找到返回null | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).firstOrDefault(x => x.a == 2):{ a: 2, b: 4 } |
lastOrDefault(func) | 查找最后一个符合条件的元素,如果没有找到返回null | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).lastOrDefault(x => x.a == 2):{ a: 2, b: 4 } |
orderBy(func) | 按条件排序,返回orderedArray对象 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).orderBy(x => x.b); |
orderByDescending(func) | 按条件排倒序,返回orderedArray对象 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).orderByDescending(x => x.b); |
count(func) | 按条件计数 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).count(x => x.b > 2):1 |
max(func) | 按条件取得最大值 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).max(x => x.b):4 |
min(func) | 按条件取得最小值 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).min(x => x.b):2 |
sum(func) | 按条件加总 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).sum(x => x.b):6 |
average(func) | 按条件求平均值 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).average(x => x.b):3 |
intersect(intersectArray, func) | 按条件去数组中的元素 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).intersect([{ a: 1, b: 2 }], x => x.a).toArray():[{ a: 2, b: 4}] |
concat(concatArray) | 组合两个数组 | $$.sae([{ a: 1, b: 2}]).concat([{ a: 2, b: 4}], x => x.a).toArray():[{ a: 1, b: 2}, { a: 2, b: 4}] |
union(unionArrary) | 组合两个数组并去除重复元素 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).union([{ a: 2, b: 4}], x => x.a).toArray():[{ a: 1, b: 2}, { a: 2, b: 4}] |
groupBy(func) | 按条件分组 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).groupBy(x => x.a).toArray():[{ key: 1, data: [{ a: 1, b: 2}] }, {key: 2, data: [{ a: 2, b: 4}]] |
setAll(func) | 遍历每个元素并在元素上执行函数 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).setAll(x => x.a = 1).toArray():[{ a: 1, b: 2}, { a: 1, b: 4}] |
forEach(func) | 与setAll功能相同 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).forEach(x => x.a = 1).toArray():[{ a: 1, b: 2}, { a: 1, b: 4}] |
forEachAsync(func, $) | 为每一个元素创建一个线程并在元素上执行函数,需要使用jQuery库 | 查看示例 |
batchProcessing(countPerEach, func) | 分批次执行函数 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).batchProcessing(1, x => x.a = 1) |
push(data) | 在数组尾部添加元素 | $$.sae([1, 2, 3]).push(4):[1, 2, 3, 4] |
insert(index, data) | 在指定位置插入元素 | $$.sae([1, 2, 3]).insert(1, 4):[1, 4, 2, 3] |
toArray() | 将数据转换成数组 | $$.sae([{ a: 1, b: 2}, { a: 2, b: 4}]).toArray():[{ a: 1, b: 2}, { a: 2, b: 4}] |
dictionary(键(name)值(value)对) | ||
---|---|---|
函数 | 备注 | 使用示例 |
setData(data) | 设置数据 | |
getData() | 取得数据 | |
toArray() | 转化为数组 | |
add(name, value) | 添加元素 | $$.dictionary().add("name", "value");$$.dictionary().add({ name: "name", value: "value" }); |
set(name, value) | 设置值 | |
get(name) | 取得值 | |
remove(name) | 删除元素 | |
count() | 取得字典数据量 | |
containsName(name) | 是否包含某name | |
containsValue(value) | 是否包含某value |
orderedArray(数组排序扩展) | ||
---|---|---|
函数 | 备注 | 使用示例 |
setData(data) | 设置数据 | $$.soa([{ a: 1, b: 2}, { a: 2, b: 4}]).setData([]); |
thenBy(func) | 按条件排正序 | $$.soa([{ a: 1, b: 2}, { a: 2, b: 4}]).thenBy(x => x.a).toArray():[{ a: 1, b: 2}, { a: 2, b: 4}] |
thenByDescending(func) | 按条件排倒序 | $$.soa([{ a: 1, b: 2}, { a: 2, b: 4}]).thenByDescending(x => x.a).toArray():[{ a: 2, b: 4}, { a: 1, b: 2}] 注:可以连续使用thenBy、thenByDescending如$$.soe([]).thenBy(x => x.a).thenByDescending(x => x.b).toArray(); |
toArray() | 将数据转换成数组 |
stringBuilder(字符串构造器) | ||
---|---|---|
函数 | 备注 | 使用示例 |
setData(data) | 设置数据 | $$.ssb("").setData("133"); |
insert(index, str) | 在指定位置插入字符串 | $$.ssb("123").insert(1, "a").toString():1a23 |
append(str) | 在尾部附加字符串 | $$.ssb("123").append("a").toString():123a |
appendFormat(format, params) | 将通过处理复合格式字符串(包含零个或零个以上格式项)返回的字符串追加到此实例。每个格式项都替换为一个参数的字符串表示形式。 | $$.ssb("123").appendFormat("{0}a{0}{1}", "x", "y").toString():123xaxy |
appendLine(str, lineCode) | 在尾部附加字符串,并添加一个换行符 | |
appendLineForHtml(str) | 在尾部附加字符串,并添加一个HTML换行符(<br />) | |
length() | 字符串长度 | $$.ssb("1231").length():4 |
replaceAll(oldStr, newStr) | 替换字符串 | $$.ssb("1231").replaceAll("1", "a").toString():a23a |
startWith(checkData) | 字符串是否以某字符串开头 | $$.ssb("1231").startWith("1"):true |
trimLeft(trimData) | 移除开始字符串 | $$.ssb("1231").trimLeft("1").toString():231 |
endWith(checkData) | 字符串是否以某字符串结尾 | $$.ssb("1231").endWith("1"):true |
trimRight(trimData) | 移除结尾字符串 | $$.ssb("1231").trimRight("1").toString():123 |
toString() | 转换为字符串 | $$.ssb("1231").toString():1231 |
dateExtension(日期扩展) | ||
---|---|---|
函数 | 备注 | 使用示例 |
setData(data) | 设置数据,并将数据转换为日期 | $$.sde(new Date()).setData("2018-09-12 13:53:00"); |
addDays(days) | 添加天数 | $$.sde("2018-09-12 13:53:00").addDays(1).toString():2018-09-13 13:53:00 |
addMonths(months) | 添加月 注:在JS中添加了月数后如果当前日期比该月最大的日期还要大会顺延到下一个月份,如2018-01-30加1个月变成了2018-03-02 | $$.sde("2018-09-12 13:53:00").addMonths(1).toString():2018-10-12 13:53:00 |
addYears(years) | 添加年 注:在JS中添加了年数后如果当前日期比该月最大的日期还要大会顺延到下一个月份,如2016-02-29加1年变成了2017-03-01 | $$.sde("2018-09-12 13:53:00").addYears(1).toString():2019-09-12 13:53:00 |
toDayBeginTime() | 转换成一在当中开始的时间 | $$.sde("2018-09-12 13:53:00").toDayBeginTime().toString():2018-09-12 00:00:00 |
toDayEndTime() | 转换成一在当中结束的时间 | $$.sde("2018-09-12 13:53:00").toDayEndTime().toString():2018-09-12 23:59:59 |
toWeekBeginTime() | 转换成本周开始的时间 | $$.sde("2018-09-12 13:53:00").toWeekBeginTime().toString():2018-09-10 00:00:00 |
toWeekEndTime() | 转换成本周结束的时间 | $$.sde("2018-09-12 13:53:00").toWeekEndTime().toString():2018-09-16 23:59:59 |
toMonthBeginTime() | 转换成本月开始的时间 | $$.sde("2018-09-12 13:53:00").toMonthBeginTime().toString():2018-09-01 00:00:00 |
toMonthEndTime() | 转换成本月结束的时间 | $$.sde("2018-09-12 13:53:00").toMonthEndTime().toString():2018-09-30 23:59:59 |
toYearBeginTime() | 转换成本年开始的时间 | $$.sde("2018-09-12 13:53:00").toYearBeginTime().toString():2018-01-01 00:00:00 |
toYearEndTime() | 转换成本年结束的时间 | $$.sde("2018-09-12 13:53:00").toYearEndTime().toString():2018-12-31 23:59:59 |
getDate() | 取得日期对象 | |
toString(format) | 格式化日期返回字符串 | $$.sde("2018-09-12 13:53:00").toString():2018-09-12 13:53:00 $$.sde("2018-09-12 13:53:00").toString("yy-MM-dd HH:mm:ss"):18-09-12 13:53:00 $$.sde("2018-09-12 13:53:00").toString("yy-m-d H:m:s"):18-9-12 23:59:0 |