路线筛选以后详情跳错了,城市探索页别再保存数组下标

发布时间:2026/10/3 20:10:48

路线筛选以后详情跳错了,城市探索页别再保存数组下标 城市路线列表在只有三条数据时用下标保存选中项看不出问题。加入距离筛选以后原本排在第二位的“老城咖啡线”可能变成第一位详情区域仍读取routes[1]画面便跳到另一条路线。城市步行探索的页面状态目前用selectedItem: number表示场景列表选择。这个写法适合静态演示继续加入搜索、距离排序和完成进度后就不够稳定。我把选择状态改成路线 ID过滤只改变可见集合不改变用户正在查看的对象。路线、地标和进度分别建模路线定义是相对稳定的内容用户进度会持续变化两者不应揉进同一个可变数组。exportinterfaceLandmark{id:stringname:stringorder:numberlatitude:numberlongitude:number}exportinterfaceWalkRoute{id:stringtitle:stringdistanceMeters:numbertags:string[]landmarkIds:string[]}exportinterfaceRouteProgress{routeId:stringvisitedLandmarkIds:string[]startedAt:numberupdatedAt:number}exportinterfaceRouteFilter{keyword:stringmaxDistanceMeters:numbertag:string}地标坐标属于路线内容是否到访属于进度。用户重新开始路线时只需要替换RouteProgress不用复制一遍地标列表。真实定位能力尚未接入时也可以通过本地按钮模拟到访验证进度计算和界面刷新。过滤结果不拥有选中状态控制器保留完整路线数组和selectedRouteId。搜索结果每次计算详情则始终回到完整数据中按 ID 查找。exportclassRouteExplorerController{privateroutes:WalkRoute[][]privatefilter:RouteFilter{keyword:,maxDistanceMeters:10000,tag:}privateselectedRouteId:stringsetRoutes(routes:WalkRoute[]):void{this.routesroutes.slice()if(!this.routes.some((item:WalkRoute)item.idthis.selectedRouteId)){this.selectedRouteIdthis.routes.length0?this.routes[0].id:}}updateFilter(next:RouteFilter):void{this.filter{...next}}visibleRoutes():WalkRoute[]{constkeywordthis.filter.keyword.trim().toLocaleLowerCase()returnthis.routes.filter((route:WalkRoute){constmatchKeywordkeyword.length0||route.title.toLocaleLowerCase().includes(keyword)constmatchDistanceroute.distanceMetersthis.filter.maxDistanceMetersconstmatchTagthis.filter.tag.length0||route.tags.includes(this.filter.tag)returnmatchKeywordmatchDistancematchTag})}selectRoute(routeId:string):boolean{if(!this.routes.some((item:WalkRoute)item.idrouteId)){returnfalse}this.selectedRouteIdrouteIdreturntrue}selectedRoute():WalkRoute|undefined{returnthis.routes.find((item:WalkRoute)item.idthis.selectedRouteId)}}筛选后选中路线可能暂时不可见。我没有立即把它改成结果第一项因为用户清除筛选时通常希望回到刚才的路线。页面可以显示“当前路线不在筛选结果中”由用户明确选择其他路线。ArkUI 列表键也使用路线 IDForEach若用数组下标做键排序后组件实例可能被复用到另一条数据。路线卡片使用route.id高亮条件也比较 ID。BuilderrouteList(routes:WalkRoute[]){Column({space:12}){ForEach(routes,(route:WalkRoute){Row({space:14}){Column({space:5}){Text(route.title).fontSize(17).fontWeight(FontWeight.Bold)Text(${(route.distanceMeters/1000).toFixed(1)}km ·${route.landmarkIds.length}个地标).fontSize(12)}.layoutWeight(1).alignItems(HorizontalAlign.Start)Text(route.tags[0]??城市漫步).fontSize(12)}.padding(16).backgroundColor(this.selectedRouteIdroute.id?#2AFFFFFF:#102536).border({width:this.selectedRouteIdroute.id?1:0,color:#4DB9FF}).borderRadius(20).onClick((){this.selectedRouteIdroute.id})},(route:WalkRoute)route.id)}}页面原有“滨江艺术线 2.4 km”“老城咖啡线 1.8 km”“夜景天桥线 3.1 km”都可以转换成WalkRoute。当按距离排序时只是传给routeList的顺序发生改变选中的 ID 不变。地标到访需要幂等定位回调可能连续命中同一地标。如果每次都向数组追加 ID页面会显示超过 100% 的完成度。更新进度前先判断是否已经存在。exportfunctionmarkVisited(progress:RouteProgress,landmarkId:string,now:number):RouteProgress{if(progress.visitedLandmarkIds.includes(landmarkId)){returnprogress}return{...progress,visitedLandmarkIds:[...progress.visitedLandmarkIds,landmarkId],updatedAt:now}}exportfunctioncompletion(route:WalkRoute,progress?:RouteProgress):number{if(!progress||route.landmarkIds.length0){return0}constvalidVisitednewSet(progress.visitedLandmarkIds.filter((id:string)route.landmarkIds.includes(id)))returnMath.round(validVisited.size/route.landmarkIds.length*100)}完成度只统计仍属于当前路线的地标。路线内容更新、删除某个地标后旧进度不会把比例撑高。这里使用经纬度只是为了说明数据边界并没有声称已完成真机定位验证。页面重建时恢复的是 ID应用进入后台或窗口重建时需要保存筛选条件、选中路线 ID 和路线进度。保存下标没有意义因为下次启动的路线排序可能已经变化。exportinterfaceExplorerSnapshot{selectedRouteId:stringfilter:RouteFilter progressList:RouteProgress[]savedAt:number}exportfunctionrestoreSelection(snapshot:ExplorerSnapshot,routes:WalkRoute[]):string{if(routes.some((route:WalkRoute)route.idsnapshot.selectedRouteId)){returnsnapshot.selectedRouteId}returnroutes.length0?routes[0].id:}页面的蓝色主题、三条路线和顶部标签切换保留原来的视觉结构数据层改为使用稳定 ID。下一步接入本地路线存储再由定位适配器上报地标到访事件。无论搜索、排序还是窗口重建详情都能继续指向用户真正选中的路线。
延伸阅读

更多相关文章

2026/10/3 20:10:48

立体空间应用

立体空间应用随着城市地面交通资源趋于饱和、城乡公共服务资源分布不均、传统产业巡检效率偏低等社会问题日益凸显,依靠地面维度的发展模式已经难以满足现代社会高效运转的需求。长期以来,人类的生产、运输、服务、治理活动高度集中于地面空间&#xff0…

2026/10/3 20:55:50

多目标跟踪中的数据关联:从匈牙利算法到YOLO MOT指标解析

1. 数据关联到底在解决什么问题 把马路上十几个人、几十辆车同时盯住,还要保证画面上每个目标框从头到尾都不张冠李戴,这件事看起来只用一句“跟踪嘛”就能带过,真正落地去做,几乎是把多目标跟踪项目做崩的头号因素。跟踪器从检测…

2026/10/3 20:55:50

MySQL IN查询优化:分片、覆盖索引与临时表JOIN的落地实践

做后端这几年,被IN查询“背刺”的次数可不算少。尤其是权限过滤、批量 ID 查询、批量导出这类业务,产品一句话“把选中的 ID 都查出来”,SQL 里就甩进来几百甚至上千个 ID。数据量小的时候,IN用着是真爽;可一旦目标表到…

2026/10/3 20:55:50

基于Python+Spark的智慧城市交通大数据系统全链路解析

简介:以Python与Spark为核心的智慧城市交通大数据系统毕业设计资料包,面向计算机相关专业本科生及需要完成课设、毕设或初期立项演示的开发者。资源完整覆盖数据采集、处理、分析与可视化流程,提供可运行的Python爬虫脚本、Scala与Java处理程…

2026/10/3 20:55:50

高级数据库查询实战:从多表连接到窗口函数的SQL备考指南

备考计算机三级(数据库技术)的同学,十有八九会在交出一套 SELECT 语句后被批错。不是你不会写查询,而是高级数据库查询考的不只是语法,它考的是你对关系模型、分组逻辑和查询优化器的理解。很多人在这一步掉链子&#…

2026/10/3 20:55:50

数字IC后端PPA优化:用Innovus Module Region锁定Timing一致性

说实话,在数字IC后端跑项目的时候,最让工程师抓狂的不是时序收敛不了,而是同样的设计、同样的约束、同样的脚本,昨天跑和今天跑结果却对不上。尤其在做PPA优化阶段,你明明把某个关键路径的setup违例修掉了,…

2026/10/3 20:50:50

SpringBoot多数据源实战:dynamic-datasource集成与避坑指南

做后端开发的兄弟,大概率都遇到过这样的场景:项目刚上线时一套MySQL库跑得挺欢,后来订单量大了,老板说要把报表拆出来,于是又多了一个只读库;再往后,用户服务单独拆了一套库,数据分析…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/2 18:20:53

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 15:02:19

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 0:04:31

国内大学生必备的AI写作辅助软件是哪款?

国内高校学生在论文写作过程中,越来越依赖AI辅助工具提升效率,主流方案以本土化全流程工具为核心,结合通用大模型与专业插件,覆盖选题构思、框架搭建、初稿撰写、查重降重、格式调整等关键环节,本文将深入解析当前主流…

2026/10/3 0:04:31

Codex接入Jev模型完整指南:配置方法、本地部署与踩坑排查

最近不少人在讨论 Codex 搭配 Jev 这套玩法,我一开始没太当回事,直到自己把 Jev 接进 Codex跑了几轮编码任务之后,才明白那些说“直接起飞”的人是怎么想的。Codex 作为工具本身已经够能打了,但模型固定、上下文策略固定&#xff…

2026/10/3 0:04:31

GitHub 热门: NVIDIA/Model-Optimizer

👋 Hi,我擅长 AI 大模型应用落地、意识解码与 AI 开发工具链 。 💡 创业路上,用技术换时间,一起把 AI 变成生产力 🚀 >GitHub 热门: NVIDIA/Model-Optimizer 凌晨两点,你刚把跑通了的 Qwen3.…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑