【问题标题】:Order array by value in NodeJS在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 中粘贴代码,请更新您的问题,并格式化代码
  • 对不起亚历克斯,下次我会做正确的

标签: arrays node.js sorting


【解决方案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}}}) 
    

    【讨论】:

      猜你喜欢
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多