JavaScript实现Map并排序
在使用AutoJs4.1.0做薅羊毛Pro版本的时候有这样一个需求:对选择的薅羊毛App进行排序。效果图如下:
JavaScript实现Map并排序
在使用AutoJs4.1.0做薅羊毛Pro版本的时候有这样一个需求:对选择的薅羊毛App进行排序。效果图如下:
JavaScript实现Map并排序
在使用AutoJs4.1.0做薅羊毛Pro版本的时候有这样一个需求:对选择的薅羊毛App进行排序。效果图如下:
JavaScript实现Map并排序
在使用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个数组。
评论内容