本次分享的是一道数据解析题:主要用到原生js中的一些数组和字符串的方法:
<script>
// 要求:
// * 1. 输出常规线路,并按照线路数字从小到大排列(如20路,301路等这些都是常规路线)
// * 2. 输出地铁线路,并按照线路数字从小到大排序
// * 3. 输出其它线路,并按照线路名称长短从小到大排序
const res = {
code: 0,
data: {
lines: '20路,301路,5路,地铁5号线,机场大巴线,107路,机场快轨',
lineids: 'lzbd,lwes,lxid,lwic,lwdf,ldfx,loin',
linedetails: {
lwdf: {
name: '机场大巴线'
},
lwes: {
name: '301路'
},
lwic: {
name: '地铁5号线'
},
ldfx: {
name: '107路'
},
lzbd: {
name: '20路'
},
lxid: {
name: '5路'
},
loin: {
name: '机场快轨'
}
}
}
}
function parse(res) {
let allRouteName = res.data.lineids.split(',')
let allRoute = res.data.lines.split(',')
var route = []
var routeName = []
var busRoute = []
var busRouteName = []
// 公交路线处理
allRoute.forEach((item, index) => {
busRoute.push(item.split('').slice(0, -1).join(''))
})
busRoute = busRoute.filter((item, index) => {
if (Number(item)) {
busRouteName.push(allRouteName[index])
return item
}
})
for (var i = 0; i < busRoute.length; i++) {
busRoute[i] = Number(busRoute[i])
}
// 排序
for (var i = 0; i < busRoute.length; i++) {
var min = i
for (var j = i + 1; j < busRoute.length; j++) {
min = busRoute[min] < busRoute[j] ? min : j
}
var temp = busRoute[i]
busRoute[i] = busRoute[min]
busRoute[min] = temp
var df = busRouteName[i]
busRouteName[i] = busRouteName[min]
busRouteName[min] = df
}
for (var i = 0; i < busRoute.length; i++) {
busRoute[i] = busRoute[i] + "路"
}
// ["5路", "20路", "107路", "301路"] (4) ["lxid", "lzbd", "ldfx", "lwes"]
route = route.concat(...busRoute)
routeName = routeName.concat(...busRouteName)
// 地铁部分处理:
var subwayRouteName = []
var subwayRoute = res.data.lines.split(',').filter((item, index) => {
if (item.indexOf('地铁') > -1) {
subwayRouteName.push(res.data.lineids.split(',')[index])
return item
}
})
// 对地铁的路径进行排序
for (var i = 0; i < subwayRoute.length; i++) {
var min = i
for (var j = i + 1; j < subwayRoute.length; j++) {
min = Number(subwayRoute[min].slice(2, -2)) < Number(subwayRoute[j].slice(2, -2)) ? min : j
}
var temp = subwayRoute[i]
subwayRoute[i] = subwayRoute[min]
subwayRoute[min] = temp
var fd = subwayRouteName[i]
subwayRouteName[i] = subwayRouteName[min]
subwayRouteName[min] = fd
}
// ) ["地铁2号线", "地铁5号线", "地铁22号线"] (3) ["dd", "lwic", "sss"]
route = route.concat(...subwayRoute)
routeName = routeName.concat(...subwayRouteName)
// 其它部分处理
var otherRoute = []
var otherRouteName = []
var data = res.data.lines.split(',')
for (var i = 0; i < data.length; i++) {
if (data[i].indexOf('地铁') < 0) {
if (!Number(data[i].slice(0, -1))) {
otherRoute.push(data[i])
otherRouteName.push(res.data.lineids.split(',')[i])
}
}
}
// 排序
for (var i = 0; i < otherRoute.length; i++) {
var min = i
for (var j = i + 1; j < otherRoute.length; j++) {
min = otherRoute[min].length < otherRoute[j].length ? min : j;
}
var temp = otherRoute[i]
otherRoute[i] = otherRoute[min]
otherRoute[min] = temp
var df = otherRouteName[i]
otherRouteName[i] = otherRouteName[min]
otherRouteName[min] = df
}
// ["机场快轨", "机场大巴线"] (2) ["loin", "lwdf"]
// 整合数据
route = route.concat(otherRoute)
routeName = routeName.concat(otherRouteName)
// 按照规则生成
var resultRoute = []
for (var i = 0; i < route.length; i++) {
var obj = {}
obj[routeName[i]] = {
name: route[i]
}
resultRoute.push(obj)
}
return resultRoute
}
var resultRoute = parse(res)
console.log("resultRoute", resultRoute)
</script>
最终结果:
以上代码可做优化处理。