JS实现对数组进行自定义排序
/** * 数组排序 * @param source 待排序数组 * @param orders 排序字段数组 * @param type 升序-asc 倒序-desc * 调用:var res = $.orderBy(arr, ['OpenTime'], 'desc').results; */ $.orderBy = function (source, orders, type) { if (source instanceof Array && orders instanceof Array && orders.length > 0) { var ordersc = orders.concat([]); var sorttype = type || 'asc'; var results = []; var totalSum = {}; function grouporder(source, orders, totalSum) { source.sort(function (a, b) { var convertA = a[orders[0]]; var convertB = b[orders[0]]; if (typeof convertA == 'string' && typeof convertB == 'string') { if (sorttype.toUpperCase() == 'ASC') { return convertA.localeCompare(convertB); } else { return convertB.localeCompare(convertA); } } else { if (sorttype.toUpperCase() == 'ASC') { return convertA - convertB; } else { return convertB - convertA; } } }); var groupmap = new Map(); source.forEach((item) => { if (groupmap.has(item[orders[0]])) { groupmap.get(item[orders[0]]).push(item); } else { groupmap.set(item[orders[0]], []); groupmap.get(item[orders[0]]).push(item); } }); orders.shift(); for (let [key, val] of groupmap) { totalSum[key] = {}; totalSum[key].name = key; totalSum[key].value = val.length; if (orders.length == 0) { results = results.concat(val); } else { totalSum[key].children = {}; var orderscopy = orders.concat([]); grouporder(val, orderscopy, totalSum[key].children); } } } grouporder(source, ordersc, totalSum); return { results: results, totalSum: totalSum }; } else { return source; } }
作 者:大師兄丶
出 处:http://www.cnblogs.com/zhao-yi
Git 地 址:https://github.com/ZhaoYis
个人博客:http://www.zhaoyis.com.cn
关于作者:主要从事基于.Net Framework平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是作者坚持原创和持续写作的最大动力!
出 处:http://www.cnblogs.com/zhao-yi
Git 地 址:https://github.com/ZhaoYis
个人博客:http://www.zhaoyis.com.cn
关于作者:主要从事基于.Net Framework平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是作者坚持原创和持续写作的最大动力!