Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按键对地图进行排序_Javascript_Dictionary_Google Apps Script - Fatal编程技术网

Javascript 按键对地图进行排序

Javascript 按键对地图进行排序,javascript,dictionary,google-apps-script,Javascript,Dictionary,Google Apps Script,如何在Google Apps脚本中按键轻松排序地图?我在某个地方找到了代码新映射([…Map.keys()].sort()。根据日志,它进行了比较,但以“TypeError:迭代器值3不是条目对象”结束。以下是代码片段: function mapSortTest() { var map = new Map(); map.set(2, 'two'); map.set(3, 'three'); map.set(1, 'one'); for (let key of map.keys()) L

如何在Google Apps脚本中按键轻松排序地图?我在某个地方找到了代码
新映射([…Map.keys()].sort()
。根据日志,它进行了比较,但以“TypeError:迭代器值3不是条目对象”结束。以下是代码片段:

function mapSortTest() {
  
var map = new Map();

map.set(2, 'two');
map.set(3, 'three');
map.set(1, 'one');

for (let key of map.keys()) Logger.log(key + " (" + typeof(key) + "): " + map.get(key));

var sortedMap = new Map([...map.keys()].sort((a,b) => {Logger.log("a: " + a + ", b: " + b); a-b;}));
  
for (let key of sortedMap.keys()) Logger.log(key + " (" + typeof(key) + "): " + sortedMap.get(key));
  
/* here I expect:
1 (number): one
2 (number): two
3 (number): three
*/

}

如果要获取已排序的键,请使用树映射而不是映射。

如果要获取已排序的键,请使用树映射而不是映射。

它应该是
新映射([…Map.entries()]
,而不是
新映射([…Map.keys()]
以下各项将按预期工作:

函数mapSortTest(){
var map=newmap();
地图集(3,'三');
map.set(2,'two');
映射集(1,'一');
对于(map.keys()的let key)Logger.log(key+”(“+typeof(key)+”):“+map.get(key));
var sortedMap=newmap([…Map.entries()].sort());
对于(let key of sortedMap.keys())Logger.log(key+”(“+typeof(key)+”):“+sortedMap.get(key));
/*在这里,我期望:
1(数字):1
2(数字):2
3(数字):3
*/
}
说明:

map.keys()
将只返回键,而不返回值,请参阅:

它应该是
新映射([…Map.entries()])
而不是
新映射([…Map.keys()])
以下各项将按预期工作:

函数mapSortTest(){
var map=newmap();
地图集(3,'三');
map.set(2,'two');
映射集(1,'一');
对于(map.keys()的let key)Logger.log(key+”(“+typeof(key)+”):“+map.get(key));
var sortedMap=newmap([…Map.entries()].sort());
对于(let key of sortedMap.keys())Logger.log(key+”(“+typeof(key)+”):“+sortedMap.get(key));
/*在这里,我期望:
1(数字):1
2(数字):2
3(数字):3
*/
}
说明:

map.keys()
将只返回键,而不返回值,请参阅:


我尝试了你的代码。它没有以TypeError结束,但它也不会改变sortedMap中项目的顺序,无论我在排序中使用a-b或b-a(对不起,a-b应该在原始帖子中)。我明白了。那就
var sortedMap=new Map([…Map.entries()].sort());for(让sortedMap.keys()的键)Logger.log(key+)(“+typeof(key)+“:“+sortedMap.get(key));
?这对上面的简单代码段有效,但原始代码中有更复杂的排序,因此我需要排序(…)中的一些匿名比较函数(不是必需的)。我做了很多实验,但没有改变顺序,只有您的“emtpy”排序()。我将研究您的排序()函数-但关键是:您需要访问map.entries()而不是maps.keys()
sort((a,b)=>a[0]-b[0])
并使用日志:
sort((a,b)=>{Logger.log(…);返回a[0]-b[0]})
,返回在这里很重要。通常感谢您为我指明了正确的方向。我尝试了您的代码。它不会以TypeError结束,但它也不会改变sortedMap中项目的顺序,无论我在排序中使用a-b或b-a(对不起,a-b应该在原始帖子中)。我明白了。那就
var sortedMap=新地图如何([…map.entries()].sort());for(let key of sortedMap.keys())Logger.log(key+”(“+typeof(key)+”:“+sortedMap.get(key));
?这对于上面的简单代码段很有效,但是原始代码中有更复杂的排序,所以我需要在sort(…)中使用一些匿名比较函数。我做了很多实验,但没有改变顺序,只有你的“emtpy”sort()。我将研究你的sort()函数-但重点是:你需要访问map.entries()而不是maps.keys()
sort((a,b)=>a[0]-b[0])
和日志:
sort((a,b)=>{Logger.log(…);返回a[0]-b[0]})
,返回在这里很重要。通常感谢您为我指明了正确的方向。