/ 请在你熟悉的编辑器或IDE里写好代码后用屏幕截图工具截取并提交(注意: 不接受手机拍照)
/* * 实现函数parse,将服务端返回的公交数据按下面定义的规则优先级输出: * * 1.
输出常规线路,并按照线路数字从小到大排列(如20路,301路等这些都是常规路线) * 2. 输出地铁线路,并按照线路数字从小到大排序 * 3. 输出其它线路,并按照线路名称长短从小到大排序 * * parse的函数签名是: *
declare function parse(res: Object): Object; * * 下面代码为示例数据按照上述规则和函数签名转换后结果,请参照该示例数据实现对应效果 */
// 初始数据结构
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: '机场快轨' } }
}
}
// 要整合成的数据
let data = [
{ lxid: { name: '5路' } },
{ lzbd: { name: '20路' } },
{ ldfx: { name: '107路' } },
{ lwes: { name: '301路' } },
{ lwic: { name: '地铁5号线' } },
{ loin: { name: '机场快轨' } },
{ lwdf: { name: '机场大巴线' } }
]
开始答题
// 答题代码
const parse = (res) => {
let arr = []
let DataObj = Object.assign(res.data.linedetails, res.data.lzbd)
let arr1 = [] // 公交
let arr2 = [] // 地铁
let arr3 = [] // 其他
for (const item in DataObj) {
let objName = DataObj[item]
if (/\d/g.test(objName.name) && objName.name.indexOf('地铁') == -1) {
let obj = {}
obj[item] = objName
arr1.push(obj)
}
else if (objName.name.indexOf('地铁') != -1) {
let obj = {}
obj[item] = objName
arr2.push(obj)
}
else {
let obj = {}
obj[item] = objName
arr3.push(obj)
}
}
arr1.sort((a, b) => Object.values(a)[0].name.replace(/[^0-9]+/g,'') - Object.values(b)[0].name.replace(/[^0-9]+/g,''))
arr2.sort((a, b) => Object.values(a)[0].name.replace(/[^0-9]+/g,'') - Object.values(b)[0].name.replace(/[^0-9]+/g,''))
arr3.sort((a, b) => Object.values(a)[0].name.length - Object.values(b)[0].name.length)
arr = [...arr1, ...arr2, ...arr3]
return arr
}
console.log(parse(res));