繁体   English   中英

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

[英]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将起作用(如同非unshiftsplice )。

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("-") ,否则不要使用Arraynew Array 而是使用数组文字语法[] 它更清晰(在大多数浏览器中实际上更快 )。
  • 如有疑问,请在浏览器中打开MDN和控制台并进行试用。

我如何对地图进行排序,以便按照数组中的项目数排序键?

地图不是有序的 - { '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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM