技术标签: html5 js方法 javascript
因为在开发中需要用到省市区数据,但是后端只返回最里层城市的code值
频繁百度找不到很好的方法,很多都是写了好几个方法去调用,并且多次调用导致很难理解;
这里分享一下我根据自己的思路所完成的一个方法。
(方法未经过长久测试,会有未知bug,并且可能会在不同数据体下也会有误差!)
废话:
在城市数据中我们知道,基本由以下三个字段构成:code、name、children
code是省市区的唯一代码,name则是省市区的名称,children则是省市区下的子项。
我们在只查找返回code对应的省市区的名称时很简单,普通的递归就可以实现;
但是如果我们也想要去获取上一层的数据,该怎么拿呢?
思路:
很简单,在递归中,除了第一层的循环,内循环均向下传入父级数据。
第一层循环不传入是因为如果不打断,就会卡死循环。
这个时候我们只能拿到两层数据,当前级和上一级。
那如果还想往上查找,还记得我们传入的父级数据吗,父级的code就起到了作用
重复调用递归方法,注意,此时调用必须传入源数据,也就是一开始的那一大串数据,这个时候调用查找到的就是父级的code和name
方法会一直循环遍历查询,直到已经达到最外层。
我们把我们所需要的数据用一个数组存放起来,并且return出去。
代码:
/**
* 根据code查询城市
* 并查出所有父级
* 原理 ===>
* 通过递归查找code与传入code相同
* 且在查找相同code的同时,将上级内容传递进下级循环中
* 如果code相同了,上级内容自然就能拿到
* 因为不知道有多少个上级
* 所以在查找到之后继续进行递归源数据(这里注意,并不是当前循环数据,而是最根本的数据)
* 这个时候不需要传递当前级的内容,否则无限循环卡死
*/
function getArea(json, code) {
let names = [];
let codes = [];
function findCity(list, code, father) {
const index = list.findIndex(ev => ev.code == code);
if (index > -1) {
const child = list[index];
names.unshift(child.name);
codes.unshift(child.code);
father && names.unshift(father.name) && codes.unshift(father.code);
father && findCity(json || [], father.code);
return;
}
list.map(item => {
if (item.children) {
findCity(item.children || [], code, item);
}
})
}
findCity(json, code);
names = [...new Set(names)];
codes = [...new Set(codes)];
return { codes, names };
}
const list = getArea(cityJson, parseInt(code));
console.log(list);
文章浏览阅读1.4w次。在 1950、1960 年代,早期 AI 研究者们开发了一系列实验项目,如西蒙和纽埃尔的逻辑理论机(Logic Theorist)、麦卡锡的 Lisp 语言和明斯基的微世界(Micro World)等。总的来说,从 20 世纪 40 年代末到 50 年代的 AI 理论形成和发展过程,为后续的 AI 研究和应用奠定了坚实的基础。在本章中,我们将分析第一个 AI 研究的黄金时代,探讨其重要突破和成就,以及此阶段对 AI 发展历程产生的长远影响。这些算法穿插在人工智能的各个领域,推动着技术的创新与突破。
文章浏览阅读298次。一、场景说明: 虚拟软件使用VirtualBox,虚机操作系统使用CentOs7.3, 最小化安装后在虚机里面安装增强工具。 二、安装方法: 首先要先安装图形界面不然..._vboxwindowsadditions-amd64.exe下载
文章浏览阅读227次。执行上面的测试代码,发现使用 32 位的 JDK 通过配置的 testodbc 数据源 (32 位的驱动程序)能够正常的连接到 64 位的数据库,如下图所示。 这个场景并不完全真实,只是我个人的一个联想和猜测,中间极有可能出 现不正确或不完整的......在 face.h 的头文件中包含了 jni.h 头 文件,所以需要将 jdk 安装目录下 include 文件夹下的 jni.h 头文件和 in..._32位jdk连不上数据库
文章浏览阅读607次,点赞19次,收藏18次。例如,虽然 8B 参数模型在 Chinchilla 的最佳训练计算量对应于约 200B 个Token,但我们发现,即使在模型训练完成之后,再接受了两个数量级以上的数据训练,模型性能仍在继续提高。此版本是在 15 万亿个 Token 上预训练的语言模型,具有 8B 和 70B 两种参数规模,可以支持广泛的用户场景,在各种行业基准上取得了最先进的性能,并提供一些了新功能,包括改进的推理能力,这些都是同时期最好的开源模型。此外,还进行了广泛的实验,以评估在最终预训练数据集中混合不同来源的数据的最佳方法。_如何解决llama3 token长度问题
文章浏览阅读347次。Ubuntu安装svnapt-get install subversiongit工具使用ubuntu 18.04下svn的安装与基本命令_svn删除文件夹命令
文章浏览阅读1.4k次。在日常工作中,服务器常常会有多台。特别是应用服务器存在多台的情况下,在每台机器手动部署或升级服务,每次登录多台机器特别麻烦,通过一台机器跳转每次输入密码(一般都是超强密码)也麻烦。所以说配置机器间的免密,对日常工作来说可以简化操作流程,节省宝贵时间。这篇就简单说说如何配置多台机器间的免密功能。_从linux服务器上ssh连接其他主机免输密码
文章浏览阅读2.7k次,点赞2次,收藏3次。觉得有帮助的同学可以点个赞!传递给更多人!docker进入容器docker exec -it 容器id bashcentos开机自启docker# 设置开机启动systemctl enable docker.service# 关闭开机启动systemctl disable docker.servicedocker容器设置自动启动# 启动时加--restart=alwaysdocker run -d --restart=always -p 3307:3306 -e MYSQL_ROO_docker中怎么开机启动mariadb
文章浏览阅读3k次,点赞11次,收藏38次。Python 用Tushare接口获取股票数据并存储到Sqlite数据库使用技术介绍:关于接口 由于tushare旧版本即将不能用了,所以我们这里使用的是tushare pro 接口。关于数据库 使用了Sqlite轻量级数据库适合本地使用。具体实现Tushare Pro 爬取数据Pro接口需要前往官网(https://tushare.pro/)注册,并获取token,过程较为繁琐,而本文篇幅有限故将在之后更新获取token文章。将获取到的token值放进config文件中的tushare_id,ts_code,trade_date,close,open,high,low,pre_close,change,pct_chg,vol,amoun
文章浏览阅读1.6k次。java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99) at or_illegalstateexception:falied to convert map to bean
文章浏览阅读8k次。不管是手机还是电脑,刚买的时候运行都是挺快的,时间用久了,就开始出来卡顿和反应慢的现象。那么电脑很卡是什么原因?是什么原因造成电脑卡顿的呢?恐怕很多用户都不是很了解,下面,小编就来跟大家分享电脑卡的原因有哪些。电脑是与我们生活越来越相关的一个物品,使用电脑也成了我们聊天,学习,娱乐甚至工作的新方式,这时候,一个流畅的电脑使用就很重要了,电脑卡顿的原因有许多,为了用户更好的了解,下面,小编就来跟大家..._电脑很卡是什么原因
文章浏览阅读31次。毕业论文(设计)题目(中文):基于微信小程序的电子竞技信息交流平台的设计与实现姓 名 学 号 院 (系) 专业、年级 指导教师2021年5月6日目 录1 绪 论 11.1课题研究背景 11.2设计原则 11.3研究内容 22系统关键技术 32.1 微信小程序 32.2微信Web开发者工具 32.3微信小程序API接口 32.4 WXML 、WXS、JS小程序编写语言 32.5 MYSQL数据库 43系统分析 53.1可行性分析 53.1.1
文章浏览阅读1.1w次,点赞9次,收藏28次。https请求如何在代码中调用