温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

js怎么解决火车票排序的问题

发布时间:2022-01-05 16:19:12 阅读:132 作者:iii 栏目:大数据
前端开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本篇内容主要讲解“js怎么解决火车票排序的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js怎么解决火车票排序的问题”吧!

题目:一个人从北京出发,坐火车去旅行,途经N个城市,目的地是上海,拿到这些火车票如何对其进行排序。

分析一下这个题目的描述,本质就是数组排序啊,只不过这个数组比较特殊,数组的每一项应该是一个对象,对象有两个属性,即每张票的起始站和终点站。

所以第一步应该是构建这个数据结构,如下:

var arr =[     { start: '肃宁', end: '长沙' },    { start: '沧州', end: '任丘' },    { start: '任丘', end: '肃宁' },    { start: '长沙', end: '武汉' },    { start: '武汉', end: '上海' },    { start: '北京', end: '沧州' } ]

模拟出数据结构了,下一步就是将其按照顺序排列出来。解题思路大致是先找出旅行的起始站那张票,然后循环遍历这个数组,根据当前项的终点站和下一张票的起始站相同,查找出下一张火车票,从而将顺序排列出来。

如何用代码将第一张票找出来呢?可以仔细观察一下这个数据,发现如下特点:第一张车票的起始站绝对不会出现在终点站里面出现,利用这个特点将起始站的车票查找出来,代码如下(详解见注释):

// 计算出每趟车的起始站var startarr= arr.map((e,l)=>{    return e.start;});// 计算出每趟车的终点站var endarr =arr.map((e,l)=>{    return e.end});// 定义一个新数组var arr2 = [];// 利用旅行目的的起始站绝对不会出现在终点站里面,将其筛选出来,填充进数组;for(var i=0;i<startarr.length;i++){    if(endarr.indexOf(startarr[i])==-1){       let a= arr.filter((e,t)=>{            return e.start == startarr[i]        })        arr2.push(a[0])    }}

之后循环遍历乱序的车票数组,每次循环取出arr2数组的最后一项,根据这一项的end属相,到乱序数组中查询start属性与其相同的车票,查找到之后将其推进arr2数组,循环遍历完,得到排序完成的数组,代码如下:

for(var i=0;i<arr.length;i++){    let ticket = arr2[arr2.length-1];    var tt = arr.filter((e)=>{        return e.start ==ticket.end    });    if(tt.length==1){        arr2.push(tt[0])    }}

今天回过头来看这些代码,当然是略显稚嫩了,所以用se6的一些特性对上面代码做了一次优化,代码如下:

var arr =[     { start: '肃宁', end: '长沙' },    { start: '沧州', end: '任丘' },    { start: '任丘', end: '肃宁' },    { start: '长沙', end: '武汉' },    { start: '武汉', end: '上海' },    { start: '北京', end: '沧州' }     ]let a = arr.filter((e,i,arr)=>arr.map(v=>v.end).indexOf(e.start) == -1);let b = arr.reduce((pre,cur,index,arr)=>{   return pre.concat(arr.filter((e,i)=>{       return e.start == pre[pre.length-1].end;    }));},a)console.log(b);

数组去重的方法:

function unique(arr){    return Array.from(new Set(arr));}function unique(arr){    return [...new Set(arr)];}function unique(arr){    var obj = {};    return arr.filter(e=>{return !obj[e]&&(obj[e]=1)})}

到此,相信大家对“js怎么解决火车票排序的问题”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/4582019/blog/4379383

js
AI

开发者交流群×