Arrays 在NodeJS中按值排序数组

Arrays 在NodeJS中按值排序数组,arrays,node.js,sorting,Arrays,Node.js,Sorting,我正在学习node,现在我正在尝试订购如下数组: "lng" : [{ "ES" : 5, "EN" : 3, "IT" : 4 }] (这是MongoDB中查询结果的一部分),我需要按编号对数组进行排序: "ES" : 5, "IT" : 4, "EN" : 3 db.users.find({lng_array : {$elemMatch:{key:"ES", value:5}}}) 我使用了sort(),但是这个函数

我正在学习node,现在我正在尝试订购如下数组:

"lng" : [{
        "ES" : 5,
        "EN" : 3,
        "IT" : 4
    }]
(这是MongoDB中查询结果的一部分),我需要按编号对数组进行排序:

"ES" : 5,
"IT" : 4,      
"EN" : 3
db.users.find({lng_array : {$elemMatch:{key:"ES", value:5}}}) 
我使用了
sort()
,但是这个函数按照第一个参数的字母顺序对数组进行排序,但是我需要按照第二个参数进行排序,我尝试了很多方法,但是没有结果


谢谢你的帮助

JavaScript没有有序对象,因此首先应将对象转换为此类数组:

[
    { key: "ES", value: 5 },
    { key: "EN", value: 3 },
    { key: "IT", value: 4 }
]
然后按
键进行排序

您可以按如下方式轻松完成:

// ("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] };
});
然后只需按
键进行排序:

result.sort(function (a, b) {
  return (a.value < b.value) ? -1 : 1;
});
result.sort(函数(a,b){
返回值(a值

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

谢谢Nikita,添加键和值排序工作得很好,我现在的问题是进行查询以获得具有特定键和值的结果

我可以通过键获取元素:

db.users.find({"lng.key" : "ES"})
或按值:

db.users.find({"lng.value" : 5})
但不是在同一个查询中同时使用这两个选项:/

[编辑]

我已经找到了解决方案,$elemMatch

"ES" : 5,
"IT" : 4,      
"EN" : 3
db.users.find({lng_array : {$elemMatch:{key:"ES", value:5}}}) 

你在用猫鼬吗?还是mongodb本地人?请发布您的完整查询您是否正在尝试对
{“ES”:5,“EN”:3,“IT”:4}
JavaScript对象进行排序?如果我没记错的话,JavaScript对象的键值对没有“顺序”。嗨,Alex,谢谢你的回复,我使用的是Mongoose。集合的每个元素都是这样的:{“_id”:ObjectId(“54a15e7e3453b5741a6c7be0”),“name”:“Miguel”,“lng”:{“ES”:5,“EN”:3,“IT”:4},“email”:miguel@gmail.com“,”密码“:“123123”}…等。查询:db.users.find({lng.en:{$lt:5}})我想得到级别为1、2、3或4的“en”用户。感谢您不要在评论中粘贴代码,请更新您的问题并格式化代码。对不起,Alex,下次我会正确处理