[英]JavaScript: Map-Like Array, Sorting and Adding
我正在尝试在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
1)我如何在数组中添加内容? 例如,如果动物#7是猫,下面的代码是否正确?
myMap["cats"].push(7); //so that myMap["cats"] is now an array with [1,4,5,7]
2)我如何对地图进行排序,以便按照数组中的项目数排序键? 在这种情况下,myMap [“cats”]将位于myMap [“dogs”]的前面,因为“cats”的数组比“dogs”的数组有更多的项目。 以下代码是否正确?
myMap.sort(function(a,b){return myMap[b].length - myMap[a].length});
如果在JavaScript中有更有效的方法,请告诉我。 非常感谢!
好像你已经回答了自己的第一个问题。
至于第二个问题,你需要另一个数组来维护地图键的排序顺序。
var mapKeys = Object.keys(myMap);
mapKeys.sort(function(a,b){return myMap[b].length - myMap[a].length});
然后,您可以迭代mapKeys
以按排序顺序获取集合。
mapKeys.forEach(function(key) {
console.log("Processing ", key);
var indices = myMap[key];
});
1)是的, push
将起作用(如同非unshift
或splice
)。
2)对象键本质上是无序的,因此它们没有sort
函数:-)您可以向地图添加一个函数,以按排序顺序返回值:
myMap.sort = function sortMap(sortFunc) {
var results = [];
for (key in this) {
if (this.hasOwnProperty(key) && this[key] !== sortMap) {
results.push(this[key]);
}
}
return results.sort(sortFunc);
};
myMap.sort(function(a, b) { return a.length - b.length; });
一些说明:
Array(12).join("-")
创建一个包含11个破折号的字符串Array(12).join("-")
,否则不要使用Array
或new Array
。 而是使用数组文字语法[]
。 它更清晰(在大多数浏览器中实际上更快 )。 我如何对地图进行排序,以便按照数组中的项目数排序键?
地图不是有序的 - { 'cats': [1,4,5], 'dogs': [2,3,6] }
之间没有区别{ 'cats': [1,4,5], 'dogs': [2,3,6] }
和{ 'dogs': [2,3,6], 'cats': [1,4,5] }
。
至于你的其余问题 - 是的,这一切都是正确的。 但不是写这个:
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
我建议写这个:
var myMap = {
'cats': [1,4,5], //animals 1,4,5 are cats
'dogs': [2,3,6] //animals 2,3,6 are dogs
};
或许这个:
var animals = [ 'cats', 'dogs', 'dogs', 'cats', 'cats', 'dogs' ];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.