在NodeJS中按值排序数组

Posted

技术标签:

【中文标题】在NodeJS中按值排序数组【英文标题】:Order array by value in NodeJS 【发布时间】:2015-04-22 00:48:34 【问题描述】:

我正在学习节点,现在我正在尝试订购这样的数组:

"lng" : [
        "ES" : 5,
        "EN" : 3,
        "IT" : 4
    ]

(这是MongoDB中查询结果的一部分),我需要按数字排序数组

"ES" : 5,
"IT" : 4,      
"EN" : 3

我使用了sort(),但这个函数按第一个参数的字母顺序排列数组,但我需要按第二个参数排列,我尝试了很多东西但没有结果。

感谢您的帮助!

【问题讨论】:

你在用猫鼬吗?还是 mongodb 原生的?请发布您的完整查询 您是否要对"ES":5,"EN":3,"IT":4 javascript 对象 进行排序?如果我没记错的话,JavaScript 对象的键值对没有“顺序”。 嗨,Alex,感谢您的回复,我正在使用 Mongoose。集合的每个元素都是这样的: "_id" : ObjectId("54a15e7e3453b5741a6c7be0"), "name" : "Miguel", "lng" : "ES" : 5, "EN" : 3, "IT" : 4 ,“电子邮件”:“miguel@gmail.com”,“密码”:“123123” ...等。查询: db.users.find( "lng.en" : $lt : 5 ) 我想获取级别为 1、2、3 或 4 的“EN”用户。谢谢跨度> 不要在 cmets 中粘贴代码,请更新您的问题,并格式化代码 对不起亚历克斯,下次我会做正确的 【参考方案1】:

JavaScript 没有有序的对象,所以首先你应该把你的对象转换成这样的数组:

[
     key: "ES", value: 5 ,
     key: "EN", value: 3 ,
     key: "IT", value: 4 
]

然后按value 键排序。

你可以很容易地做到这一点:

// ("mongoDbResult" is the variable with an object you get from MongoDB)
var result = mongoDbResult.lng;

result = Object.keys(result).map(function (key) 
  return  key: key, value: result[key] ;
);

然后只需按value 键排序:

result.sort(function (a, b) 
  return (a.value < b.value) ? -1 : 1;
);

因此,您应该在result 变量中获得一个排序数组。

【讨论】:

【参考方案2】:

谢谢 Nikita,添加键和值排序完美,我现在的问题是进行查询以获取具有特定键和值的结果...

我可以通过 KEY 获取元素:

db.users.find("lng.key" : "ES")

或按价值:

db.users.find("lng.value" : 5)

但不是两者都在同一个查询中:/

[编辑]

我找到了解决方案,$elemMatch

db.users.find(lng_array : $elemMatch:key:"ES", value:5) 

【讨论】:

以上是关于在NodeJS中按值排序数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Lua 中按值关联排序表

在 JavaScript 中按值对字典进行排序

在mysql json中按值删除数组元素

在javascript数组中按值获取索引

javascript在嵌套对象/数组中按值查找

在elasticsearch中,如何在嵌套数组中按值分组