Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在寻找一种在javascript中对对象数组进行排序的方法_Javascript_Arrays_Json_Sorting_Lodash - Fatal编程技术网

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

正在寻找一种在javascript中对对象数组进行排序的方法,javascript,arrays,json,sorting,lodash,Javascript,Arrays,Json,Sorting,Lodash,因此,我有一个JSON数组,如下所示: [ { row: [ { boat: { description: 'Books', version: '2', id: 6 }, airplanes: [ { airplane: [ { description: 'DVD

因此,我有一个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数组输出将比提供的示例大得多。

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

cat|jq-s

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

cat|jq-s

下划线和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
)。然后在每个对象中,它在每个
元素上循环,并通过每个元素中包含的
wid
元素对
行进行排序


希望这对你有帮助。顺便说一句,您发布的数据完全是无效的JSON。每个键都应该是双引号,即
“行”
,而不仅仅是
,单引号对于分隔字符串无效,即
“DVD”
而不是
“DVD”
。另外,您的
boat
版本是一个字符串,而您的其他版本标识符是整数,最好尝试将您的版本标识符保留为整数。

下划线和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
)。然后在每个对象中,它在每个
元素上循环,并通过每个元素中包含的
wid
元素对
行进行排序


希望这对你有帮助。顺便说一句,您发布的数据完全是无效的JSON。每个键都应该是双引号,即
“行”
,而不仅仅是
,单引号对于分隔字符串无效,即
“DVD”
而不是
“DVD”
。另外,您的
boat
版本是一个字符串,而您的其他版本标识符是整数,最好尝试将您的版本标识符保留为整数。

FYI,您拥有的是一个对象数组,而不是JSON。是指定的数据格式。对于此类特定场景,没有内置方法。你必须自己写逻辑。或者也许有一些方法可以帮助你。不知道,我不使用lodash。没有内置的方式,但您可以在JavaScript中设置创建自定义排序函数,并在要在对象内排序的对象数组(可能是
airplanes
数组)上使用它。下面是一个自定义排序的示例:仅供参考,这里有一个对象数组,而不是JSON。是指定的数据格式。对于此类特定场景,没有内置方法。你必须自己写逻辑。或者也许有一些方法可以帮助你。不知道,我不使用lodash。没有内置的方式,但您可以在JavaScript中设置创建自定义排序函数,并在要在对象内排序的对象数组(可能是
airplanes
数组)上使用它。下面是一个自定义排序的示例:出于某种原因,我尝试了您在上提出的方法,它没有对返回的结果进行排序(请参阅控制台输出)。我做了一个console.log(row.airplanes);这不是我应该做的吗?我假设row.飞机会返回正确的输出?或者它会自动更新“数据”数组吗?我解决了我的问题,在我的JSFIDLE中添加了lodash.js和下划线.js CDN。根据你的回答,我想我两样都需要。在意识到是这样或那样之后。我删除了underline.js并将u.each更改为u.forEach,现在它似乎可以正常工作。谢谢你给我指出了正确的方向。@adbarads编辑了答案,使之更清楚,thanks@adbarads此外,许多lodash函数都有别名(为underline.js提供插入替换功能),因此u0.each和0.forEach都是相同的函数。出于某种原因,我尝试了您在上建议的方法,它没有对返回的结果进行排序(请参阅控制台输出)。我做了一个console.log(row.airplanes);这不是我应该做的吗?我假设row.飞机会返回正确的输出?或者它会自动更新“数据”数组吗?我解决了我的问题,在我的JSFIDLE中添加了lodash.js和下划线.js CDN。根据你的回答,我想我两样都需要。在意识到是这样或那样之后。我删除了underline.js并将u.each更改为u.forEach,现在它似乎可以正常工作。谢谢你给我指出了正确的方向。@adbarads编辑了答案,使之更清楚,thanks@adbarads此外,许多lodash函数都有别名(为underline.js提供插入替换功能),因此u0.each和0.forEach都是相同的函数。