【问题标题】:How to achive sorting in JavaScript as Given example in PHP below如何在 JavaScript 中实现排序,如下面的 PHP 示例
【发布时间】:2020-11-25 21:00:57
【问题描述】:

请帮助了解如何在 JavaScript 上实现。我有数据类型。这种排序的目的是我有对象列,其中列没有按要求排列。下面这个函数以简单的排列数组列为例。我已经在本地机器上测试了这段代码,这是我得到的输出。

<?php
$data =  '[
  {
    "from": "Barcelona",
    "to": "New York",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Flight",
    "transportno": "B33",
    "seatno": "Y15"
  },
  {
    "from": "Barcelona",
    "to": "Gerona",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Bus",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  },
  {
    "from": "Madrid",
    "to": "Barcelona",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Bus",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  },
  {
    "from": "New York",
    "to": "Stockholm",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Flight",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  },
  {
    "from": "Gerona",
    "to": "Barcelona",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Bus",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  }
]';

现在我需要以这种方式排序的数据 然后从马德里飞往巴塞罗那 巴塞罗那到赫罗纳 - 赫罗纳到巴塞罗那 - 巴塞罗那到纽约—— 纽约到斯德哥尔摩 -

$data_decode = json_decode($data, true);

usort($data_decode, function ($a, $b) {
  return $a['to'] === $b['from'] ? 0 : 1;
});


print_r($data_decode);

输出

数组 ( [0] => 数组 ( [来自] => 马德里 [到] => 巴塞罗那 [说明] => [时间] => 2018-02-02 20:05 [交通] => 巴士 [运输号] => M31、M32、M33 [座位号] => 任何 )

[1] => Array
    (
        [from] => Barcelona
        [to] => Gerona
        [instruction] => 
        [time] => 2018-02-02 20:05
        [transport] => Bus
        [transportno] => M31, M32, M33
        [seatno] => Any
    )

[2] => Array
    (
        [from] => Gerona
        [to] => Barcelona
        [instruction] => 
        [time] => 2018-02-02 20:05
        [transport] => Bus
        [transportno] => M31, M32, M33
        [seatno] => Any
    )

[3] => Array
    (
        [from] => Barcelona
        [to] => New York
        [instruction] => 
        [time] => 2018-02-02 20:05
        [transport] => Flight
        [transportno] => B33
        [seatno] => Y15
    )

[4] => Array
    (
        [from] => New York
        [to] => Stockholm
        [instruction] => 
        [time] => 2018-02-02 20:05
        [transport] => Flight
        [transportno] => M31, M32, M33
        [seatno] => Any
    )

) 【0.1s完成】

如何在 JavaScript 中获得此结果。您的帮助将不胜感激。

【问题讨论】:

  • 我认为您正在尝试按键对对象数组进行排序,请查看:stackoverflow.com/questions/8837454/…
  • 我完全按照您没有的方式尝试了它没有给出预期的结果。请检查 php usort 代码的上述输出。因为它应该像巴塞罗那到赫罗纳 - 赫罗纳到巴塞罗那 - 巴塞罗那到纽约 - 纽约到斯德哥尔摩这样的链接 - 正是出于这个原因提供了数据,但是每个机场都相互连接,您可以检查 php 输出

标签: javascript php arrays json sorting


【解决方案1】:

在 javascript 中查看array sort method

var data = [
  {
    "from": "Barcelona",
    "to": "New York",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Flight",
    "transportno": "B33",
    "seatno": "Y15"
  },
  {
    "from": "Barcelona",
    "to": "Gerona",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Bus",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  },
  {
    "from": "Madrid",
    "to": "Barcelona",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Bus",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  },
  {
    "from": "New York",
    "to": "Stockholm",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Flight",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  },
  {
    "from": "Gerona",
    "to": "Barcelona",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Bus",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  }
];

var sortedData = data.sort( function( a, b ) {
  return a[ 'to' ] === b[ 'from' ] ? 0 : 1;
} );

console.log( sortedData );

输出


[
  {
    "from": "Madrid",
    "to": "Barcelona",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Bus",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  },
  {
    "from": "Barcelona",
    "to": "Gerona",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Bus",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  },
  {
    "from": "Gerona",
    "to": "Barcelona",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Bus",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  },
  {
    "from": "Barcelona",
    "to": "New York",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Flight",
    "transportno": "B33",
    "seatno": "Y15"
  },
  {
    "from": "New York",
    "to": "Stockholm",
    "instruction": "",
    "time": "2018-02-02 20:05",
    "transport": "Flight",
    "transportno": "M31, M32, M33",
    "seatno": "Any"
  }
]

【讨论】:

  • 我完全按照您没有的方式尝试了它没有给出预期的结果。请检查 php usort 代码的上述输出。因为它应该像巴塞罗那到赫罗纳 - 赫罗纳到巴塞罗那 - 巴塞罗那到纽约 - 纽约到斯德哥尔摩这样的链接 - 正是出于这个原因提供了数据,但是每个机场都相互连接,您可以检查 php 输出。
  • @user3201528 请你扩展一下这个问题。我已经粘贴了上面代码的输出,看起来是正确的。
  • 嗨。我没有收到与您发布的相同的输出,当我运行代码 sn-p 时,我会得到不同的输出,请检查此链接,我收到的是 github.com/qdcmedia123/test123/blob/master/sorttest.js
  • @user3201528 您需要记录 sortedData 变量而不是 data 变量。更改为console.log( sortedData )。希望这会有所帮助。
  • 我试过了,但还是一样,请查看链接 github.com/qdcmedia123/test123/blob/master/sorttest.js
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 2014-12-06
相关资源
最近更新 更多