在NodeJS中按值排序数组

时间:2015-02-20 10:57:20

标签: arrays node.js sorting

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

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

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

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

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

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变量中获得一个已排序的数组。

答案 1 :(得分:0)

谢谢Nikita,添加密钥和值,排序工作完美,我现在的问题是使查询获得具有特定键和值的结果...

我可以通过KEY获取元素:

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

或者通过VALUE:

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

但不是同一个问题的两者:/

<强> [编辑]

我找到了解决方案 $ elemMatch

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