首页 > 解决方案 > 无论如何使用lodash对数字对象的json数组进行排序/排序

问题描述

我正在尝试使用 lodash“orderBy”方法对 JSON 对象数组进行排序。我需要使用我可以提供的“密钥”通过 ASC 和 DESC 订购。但是当给出“id”时,它不能按预期工作。这是我的输入,

[
   {

      "disable":"0",
      "id":"37",
      "name":"abcd",
      "owner":"john",
   },
   {

      "disable":"1",
      "id":"38",
      "name":"test",
      "owner":"paul",
   },
    {

      "disable":"1",
      "id":"9",
      "name":"value1",
      "owner":"Khan",
   },
    {

      "disable":"1",
      "id":"7",
      "name":"value2",
      "owner":"Cathrine",
   },
    {

      "disable":"1",
      "id":"8",
      "name":"value4",
      "owner":"Venba",
   },
    {

      "disable":"1",
      "id":"2",
      "name":"value5",
      "owner":"Hawk",
   },
    {

      "disable":"1",
      "id":"4",
      "name":"value7",
      "owner":"other",
   },
]

我正在使用下面的方法,但它没有按预期工作,因为“id”列在字符串中。

_.orderBy(data, [{'id': Number}], 'desc');

我目前的输出是,

[
   {
      "disable": "0",
      "id": "37",
      "name": "abcd",
      "owner": "john"
   },
   {
      "disable": "1",
      "id": "38",
      "name": "test",
      "owner": "paul"
   },
   {
      "disable": "1",
      "id": "9",
      "name": "value1",
      "owner": "Khan"
   },
   {
      "disable": "1",
      "id": "7",
      "name": "value2",
      "owner": "Cathrine"
   },
   {
      "disable": "1",
      "id": "8",
      "name": "value4",
      "owner": "Venba"
   },
   {
      "disable": "1",
      "id": "2",
      "name": "value5",
      "owner": "Hawk"
   },
   {
      "disable": "1",
      "id": "4",
      "name": "value7",
      "owner": "other"
   }
]

有什么方法可以正确排序。任何帮助都感激不尽。

标签: javascriptlodash

解决方案


您可以传入回调_.orderBy并返回 id 字段包含的字符串值的数字表示形式。例如:o => parseInt(o.id)

这是一个片段:

let data = [{"disable":"0","id":"37","name":"abcd","owner":"john"},{"disable":"1","id":"38","name":"test","owner":"paul"},{"disable":"1","id":"9","name":"value1","owner":"Khan"},{"disable":"1","id":"7","name":"value2","owner":"Cathrine"},{"disable":"1","id":"8","name":"value4","owner":"Venba"},{"disable":"1","id":"2","name":"value5","owner":"Hawk"},{"disable":"1","id":"4","name":"value7","owner":"other"}];

console.log('Sorted Data: ', _.orderBy(data, o => parseInt(o.id), 'desc'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>


推荐阅读