经常会用到ES6的Map排序,总结一下
ES6 Map functions
- Map.has(KEY): 判断是否含有KEY
- Map.get(KEY): 获取指定KEY的VALUE值
- Map.keys(): 返回一个新的 Iterator对象
- Map.values(): 返回一个新的 Iterator对象
- Map.set(KEY, VALUE): 设置KEY和VALUE
- Map.entries(): 返回一个新的 Iterator 对象,它按插入顺序包含了Map对象中每个元素的 [key, value] 数组。
- Map.clear(): 移除Map对象的所有键/值对 。
- Map.delete(KEY): 移除任何与键相关联的值,并且返回该值,该值在之前会被Map.prototype.has(key)返回为true。之后再调用Map.prototype.has(key)会返回false。
js map sort by key
- 主要思想:将KEYS排序,然后把每个KEY对应的VALUE拿到即可。12345678910111213function sortMapByKey(map) {var keys = map.keys();var keysArr = [];for(var key of keys){keysArr.push(key);}keysArr.sort(function(a,b) {return a-b;});var res = new Map();for(var i=0;i<keysArr.length;i++) {res.set(keysArr[i], map.get(keysArr[i]));}return res;}
js map sort by value
- 比按照key进行排序稍微复杂一些
- 主要思想是: 两个数组分别存储key和value,然后对value进行排序,在交换的时候把key的对应元素也进行交换。
之后把排序后的key和value的数组直接匹配即可。sortMapByValue(map) { 1234567891011121314151617181920212223242526272829var swap = function(arr,i,j){var tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;};var keys = map.keys();var values = map.values();var keysArr = [], valuesArr = [];for(var key of keys) {keysArr.push(key);}for(var value of values) {valuesArr.push(value);}var len = keysArr.length;for(var i=0;i<len;i++){for(var j=len-1;j>i;j--) {if(valuesArr[j-1]<valuesArr[j]) {swap(valuesArr, j,j-1);swap(keysArr, j,j-1);}}}var res = new Map();for(var i=0;i<len;i++) {res.set(keysArr[i], valuesArr[i]);}return res;}