技术标签: 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);
文章浏览阅读5.8k次,点赞7次,收藏18次。一个大学C语言试题的简单实现,供参考。题目:员工信息管理程序主要用结构体数组实现,用结构体表示每项记录,数据为:员工编号、姓名、性别、年龄、工龄、职务、部门、住址。设计各个函数,分别实现以下功能:(1)录入:完成职工信息的输入;(2)删除:完成职工信息的删除;(3)修改:允许对已经录入的数据重新进行编辑、修改;(4)显示:显示所有职工的信息;(5)查询:a. 按姓名查找职工记录;b_char department[max_students][50]
文章浏览阅读4.3k次,点赞7次,收藏9次。链接:https://pan.baidu.com/s/15VgPf8GnxlZHcbh2grJrDQ?_matlab2023b下载
文章浏览阅读4.5k次。命令选项hashcat-cli64.exe -m 2611 -a 3 all.txt -1 ?l ?1?1?1?1?1?1?1?1 --pw-min=6 --pw-max=8-1 ?1 ?1?1?1?1?1?1?1?1注意第一个是1,第二个是l,表示字符集1全是字母。第三个是1,表示mask使用了字符集1中的,即全部是字母。--pw-min=6 --pw-max=8密码_hashcat 显示进度
文章浏览阅读111次。一.背景Maven2 的基本原理很简单,采用远程仓库和本地仓库以及 pom(project object model).xml ,将 pom.xml 中定义的 jar 文件从远程仓库下载到本地仓库,各个应用使用同一个本地仓库的 jar ,同一个版本的 jar 只需下载一次,而且避免每个应用都去拷贝 jar 。如图 1 。同时它采用了现在流行的插件体系..._mvn j2ee repo
文章浏览阅读1.1k次。1、WordPress为什么要设置固定链接伪静态这个问题是很简单的,因为搜索引擎比较喜欢静态的页面,觉得他是很简洁高效的,权重和收录都好一些2、下面就是微知找到的设置教程了:设置WordPress在Windows主机环境下伪静态固定链接的方法:我们都知道Linux主机支持WordPress伪静态固定链接,如果你使用的空间是Linux主机就比较简单安装好WP程序登陆,在WordPrcess的后台点设置(Options),点固定链接(Permalinks)这里一共有5个选项,前四个选项直接选择就可以支持,不需要_wordpress生成固链接
文章浏览阅读4k次。本文是该专栏的第25篇,后面会持续分享python的爬虫干货知识,记得关注。一般来说,选择使用自动化工具来做爬虫算是一种退而求其次的方法,但是要注意的是,面对那种需要模拟登录进行操作,或者是需要模拟登录拿到cookie再交给协议请求来说,自动化的方法那就是爬虫攻城狮的首选了。做过自动化的朋友都熟悉,selenium自身没有浏览器的驱动,它需要浏览器的驱动支持,即WebDriver,而selenium想要打开某个浏览器,需要下载对应浏览器的驱动就可以,比如_adspower selenium
文章浏览阅读517次。MySQL数据库事务隔离级别有四种:READ-UNCOMMITTED(读未提交)、READ-COMMITTED(读提交)、REPEATABLE-READ(重复读)、SERIERLIZED(序列化读)。要真正理解数据库事务隔离级不能光看书,必须要上机操作,多练几次就会明白的了。上机环境有几点大家要注意的:1,把事务的自动提交功能关掉;2,把表引擎设置为InnoDB(支持事务操作);3,在做实验的_通俗的讲一下mysql的隔离级别
文章浏览阅读1.4k次。loop循环,计算2的8次方assume cs:codesgcodesg segment mov ax,2 mov cx,7 s: add ax,ax loop s mov ax,4c00h int 21Hcodesg endsend_16位汇编 循环
文章浏览阅读7.8k次,点赞7次,收藏69次。一 wxFormBuilder是什么wxFormBuilder是一款可视化的GUI设计工具,界面设计后可以自动生成代码,免去了手工码gui的繁琐,一套界面可支持生成C++\Python\PHP\Lua\XRC等代码形式,可以极大提升python GUI开发效能。项目发布网址:https://github.com/wxFormBuilder/wxFormBuilder/releases..._vscode wxformbuilder
文章浏览阅读268次。删除 mysqlsudo apt-get autoremove --purge mysql-server-5.0sudo apt-get remove mysql-serversudo apt-get autoremove mysql-serversudo apt-get remove mysql-common //这个很重要上面的其实有一些是多余的。清理残_sudo apt-get remove mysql-common
文章浏览阅读2k次。------sqlserver 查询某个表的列名称、说明、备注、类型等SELECT 表名 = case when a.colorder=1 then d.name else '' end, 表说明 = case when a.colorder=1 then isnull(f.value,'') else '' end, 字段序号 = a.col..._sql 所有表 条件查询
文章浏览阅读5.6k次,点赞5次,收藏81次。提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录思路一、案例介绍二、具体步骤1.编写scala程序完成从mysql讲数据导出成csv文件2.打包成jar包提交到集群上3.将hdfs上的这个文件下载到本地目录下4.将本地数据文件的数据加载到hive中总结思路spark抽取mysql中的数据到hive中,可通过以下2步完成:1.先将mysql中的数据抽取到存放再hdfs上的一个文件(.csv,.txt)2.再讲文件通过load命令加载到hive中下面用具体案例演示一._spark怎么jdbc写入到hive