在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中按值排序数组的主要内容,如果未能解决你的问题,请参考以下文章