在使用AutoJs4.1.0做薅羊毛Pro版本的时候有这样一个需求:对选择的薅羊毛App进行排序。效果图如下:
想到的就是使用Map存储App名称和AppIndex,结果发现AutoJs居然不支持Js内置的Map。所以需要自己实现。其实不难网上也有很多代码如下:(我用的IDE是vscode)
/** * JS构建Map */ function Map() { var obj = {}; this.put = function (key, value) { obj[key] = value;//把键值绑定到obj对象上 } //size方法,获取Map容器的个数 this.size = function () { var count = 0; for (var attr in obj) { count++; } return count; } //get方法,根据key获取value的值 this.get = function (key) { if (obj[key] || obj[key] === 0 || obj[key] === false) { return obj[key] } else { return null; } } //remove方法,删除方法 this.remove = function (key) { if (obj[key] || obj[key] === 0 || obj[key] === false) { delete obj[key] } } //each方法,遍历方法 this.eachMap = function (callBack) { for (var attr in obj) { callBack(attr, obj[attr]) } } }
问题来了,如何对MAP排序呢。网上的基本都不行,各种尝试走了不少弯路,最后还是自己实现吧。虽然比较笨但是还是实现了。使用的是冒泡排序,冒泡排序我就不说了。说一下思路:
1、将Map划分成2个数组
2、对Map的value进行冒泡排序
3、value数据交换后也交换key
4、最后返回Key的数组
看代码:
/** * map排序(核心是冒泡有点笨) */ function mapSort(mapTask) { var arr = []; var result = []; mapTask.eachMap(function (key, value) { arr.push(value); result.push(key); }); var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - i - 1; j++) { if (arr[j] > arr[j + 1]) { //相邻元素进行对比 var valueTemp = arr[j + 1];//交换元素 arr[j + 1] = arr[j]; arr[j] = valueTemp; //value交换key也得换 var keyTemp = result[j + 1]; result[j + 1] = result[j]; result[j] = keyTemp; } } } return result;//返回数组 }
result就是排序好的数组。
如果你还是想要Map那就在new一个Map出来进行存储2个数组。