寻找一种在javascript中对对象数组进行排序的方法

时间:2016-03-16 22:50:20

标签: javascript arrays json sorting lodash

所以我有一个看起来像这样的JSON数组:

[
  {
    row: [
      {
        boat: {
          description: 'Books',
          version: '2',
          id: 6
        },
        airplanes: [
          {
            airplane: [
              {
                description: 'DVD',
                version: 2,
                uid: 69,
                wid: 65,
                id: 84
              }
            ],
            trains: {
              train: [
                {
                  description: 'Pictures',
                  version: 2,
                  id: 149
                }
              ],
              actions: [
                {
                  description: 'This is a really long sentence.',
                  version: 2,
                  tid: 69.01,
                  id: 452
                },
                {
                  description: 'article 2',
                  version: 2,
                  tid: 69.02,
                  id: 453
                },
                {
                  description: 'developer 1',
                  version: 2,
                  tid: 69.03,
                  id: 454
                }
              ]
            }
          },
          {
            airplane: [
              {
                description: 'Games',
                version: 2,
                uid: 65,
                wid: 61,
                id: 80
              }
            ],
            trains: {
              train: [
                {
                  description: 'another great descriptions.',
                  version: 2,
                  id: 145
                }
              ],
              actions: [
                {
                  description: 'being indecisive is good.',
                  version: 2,
                  tid: 65.01,
                  id: 442
                },
                {
                  description: 'couches are comfortable',
                  version: 2,
                  tid: 65.02,
                  id: 443
                }
              ]
            }
          }
        ]
      }
    ]
  }
]

我试图通过'wid'按升序对上面的输出进行排序,但仍然可以保留整体顺序。例如,在上面,数组的元素0中的wid是65,并且数组的元素1的wid值是61.因此,应该交换元素1和元素0。有没有内置的javascript方法来像这样排序json?

我的json数组输出比提供的示例大很多。

2 个答案:

答案 0 :(得分:3)

Underscore和LoDash都有一种排序方法,可以执行您正在寻找的内容。在此示例中,我假设您显示的数据结构存储在名为data的变量中。

 _.each(data, function(obj) {
     _.each(obj.row, function(row) {
        // note the reassignment, _.sortBy does not sort in-place
        row.airplanes = _.sortBy(row.airplanes, function(airplane) {
           return airplane.wid; // This will sort ascending. 
                                // To sort descending, simply multiply by -1
        });
     });
 });

那是做什么的?它将每个数组元素放在根数据结构中并循环遍历它(这是第一个_.each)。然后在每个对象中,它循环遍历每个row元素,并按每个元素中包含的row.airplanes元素排序wid数组。

希望这会对你有所帮助。另外,您发布的数据严格无效JSON。每个密钥应该是双引号,即"row",而不仅仅是row,单引号对于分隔字符串无效,即"DVD"而不是'DVD'。此外,您的boat版本是字符串,而您的其他版本标识符是整数,尝试将您的版本标识符保留为整数是个不错的主意。

答案 1 :(得分:0)

我建议使用优秀的jq命令行JSON处理器。非常快,因为它是用便携式C编写的。易于理解documentation

cat <file.json> | jq . -S