JavaScript:类似地图的数组,排序和添加

fel*_*iao 2 javascript arrays map

我正在尝试在JavaScript中创建地图或字典样式数据结构.每个字符串键指向一个int数组,我想用键指向的数组做一些简单的事情.

我有一堆动物,每只都有一个ID(1,2,3,......).我想把这些放在地图上,所以我知道1,4,5是猫,2,3,6是狗.

这是我对代码更好地解释它的方法.

var myMap = {};
myMap["cats"] = new Array(1,4,5);   //animals 1,4,5 are cats
myMap["dogs"] = new Array(2,3,6);   //animals 2,3,6 are dogs  
Run Code Online (Sandbox Code Playgroud)

1)我如何在数组中添加内容?例如,如果动物#7是猫,下面的代码是否正确?

myMap["cats"].push(7);   //so that myMap["cats"] is now an array with [1,4,5,7]
Run Code Online (Sandbox Code Playgroud)

2)我如何对地图进行排序,以便按照数组中的项目数排序键?在这种情况下,myMap ["cats"]将位于myMap ["dogs"]的前面,因为"cats"的数组比"dogs"的数组有更多的项目.以下代码是否正确?

myMap.sort(function(a,b){return myMap[b].length - myMap[a].length});
Run Code Online (Sandbox Code Playgroud)

如果在JavaScript中有更有效的方法,请告诉我.非常感谢!

小智 8

好像你已经回答了自己的第一个问题.


至于第二个问题,你需要另一个数组来维护地图键的排序顺序.

var mapKeys = Object.keys(myMap);

mapKeys.sort(function(a,b){return myMap[b].length - myMap[a].length});
Run Code Online (Sandbox Code Playgroud)

然后,您可以迭代mapKeys以按排序顺序获取集合.

mapKeys.forEach(function(key) {
    console.log("Processing ", key);
    var indices = myMap[key];
});
Run Code Online (Sandbox Code Playgroud)