一开始我以为数组转树是一个很复杂的事,因为你可能要写一个在树中寻找某个父节点的方法,还要判断哪个是最顶级节点。 但是利用下面这个方法,化繁为简。真是牛P。...最核心的是map[ownercn].children.push(item) 这句 ,这里的ownercn可以看做是父节点的id。...ownercn]) { map[ownercn].children.push(item) } else { console.log(`没有找到cn为${ownercn}的节点...result.push(item) } }) console.log(JSON.stringify(result)) 数据是一下, cn为id owner 中cn等号后面的值是父节点id 垃圾的后台
前言 对于Javascript处理 Excel 文件来说,js-xlsx 库是目前 Github 上 star 数量最多的库了,功能非常强大,强大到入门时瑟瑟发抖。文档有些乱,不适合快速上手。...关于 node-xlsx Node-xlsx 是一个Node.js的扩展,通过名字应该能够猜到是干什么的,主要是用于解析和构建 Microsoft Excel 表格,这个插件基于 js-xlsx(也就是上面提到上手难度贼大的那个...node-xlsx 的技术特性 底层基于强大的 SheetJS 构建,对 xlsx 文档的格式兼容性足够好 支持导出和读取 xlsx 文档,一个工具库解决导入导出需求 只有少数几个 api ,使用非常简单...也很简单。...node-xlsx 地址 https://github.com/mgcrea/node-xlsx 注意事项 node-xlsx 只能处理结构相对简单的数据文档,如果数据格式比较复杂,可以到 SheetJS
在Linux桌面发行版提供了设置系统时间的界面程序,这个设置很简单,但是当你学会了下面的方法之后,你就开始厌烦用GUI界面设置了。...最简单的设置方法 就是创建一个符号链接/etc/localtime,其指向目标设置的时区城市代表(/usr/share/zoneinfo/ 目录下) 比如我们想把机器的时区修改成亚洲的上海(东八区),我们按照下面操作就可以了...1 sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 注意,Asia通常是没有Beijing的,可能没有上海国际化吧,所以如果是东八区就要用上海...经测试,Mac机器上述命令也是生效的。
什么时候用懒加载 当页面中需要一次性载入很多图片的时候,往往都是需要用懒加载的。 懒加载原理 我们都知道HTML中的 标签是代表文档中的一个图像。。说了个废话。。...基本步骤: 获取第一次触发事件的时间戳 获取第二次触发事件的时间戳 时间差如果大于某个阈值就执行事件,然后重置第一个时间 function throttle(fn, mustRun = 500) {...mustRun就是调用函数的时间间隔,无论多么频繁的调用 fn,只有 remaining>=mustRun时 fn才能被执行。...,此时浏览器是这样 此时第二张图片完全显示了,而第三张图片显示了一点点,这时候我们看看请求情况 img3的请求发出来,而后面的请求还是没发出~ 全部载入时 当滚动条滚到最底下时,全部请求都应该是发出的...,每个数组都是一个 IntersectionObserverEntry对象,包括以下属性: 属性描述time可见性发生变化的时间,单位为毫秒rootBounds与getBoundingClientRect
使用场景 1、检查接口可用性 主要用于在没有引入 jQuery 等工具的页面上需要验证一些 api 能否调得通的时候,可以快速调出浏览器调试界面发请求。 这在判断是否存在跨域问题的场景下,特别好用。...2、验证接口用于爬虫 另外,因为在浏览器调试界面发起的请求跟页面自身的 js 发起的请求是一样的,所以可以不用关心登录状态等上下文环境的问题。...这在写爬虫的时候特别实用——抓到一个链接之后,直接在浏览器上进行验证,先调用一下试试好不好用再说。...3、减少依赖 因为可以直接使用原生 js,因此无需添加 jQuery、axios 等第三方工具就可以发送 http 就请求,可以减少应用的体积。...}; //普通get请求 http.get('http://www.baidu.com', function (err, result) { // 这里对结果进行处理 }); //定义超时时间
什么时候用懒加载 当页面中需要一次性载入很多图片的时候,往往都是需要用懒加载的。 懒加载原理 我们都知道HTML中的 标签是代表文档中的一个图像。。说了个废话。。...基本步骤: 获取第一次触发事件的时间戳 获取第二次触发事件的时间戳 时间差如果大于某个阈值就执行事件,然后重置第一个时间 function throttle(fn, mustRun = 500) {...mustRun就是调用函数的时间间隔,无论多么频繁的调用 fn,只有 remaining>=mustRun时 fn才能被执行。...img3的请求发出来,而后面的请求还是没发出~ 全部载入时 当滚动条滚到最底下时,全部请求都应该是发出的,如图 ?...,每个数组都是一个 IntersectionObserverEntry对象,包括以下属性: 属性描述time可见性发生变化的时间,单位为毫秒rootBounds与getBoundingClientRect
十分好用,就开源了,react十分好用,性能也不错,代码逻辑相对来说也挺简单,所以很多人开始用,也有人说这是未来web的趋势 ?...……还有很多各式各样的框架,如今前端正火,甚至还有很多前端游戏引擎的JS,十分强大,在这里就不多说了 好了,貌似有点废话了,那么入正题吧,写JS,其实也要面向对象,在08年小编我刚入坑工作的时候,JS并不受大家重视...,甚至CSS都是让美工人员做的,现在已经大不一样,来看看一个简单的登录是如何用面向对象的方式做的吧: 先来看看登录页面的代码,十分简单,就是一个用户名和密码 ?...重头戏在js部分,我单独写了份login.js ?...作为后端人员,JS其实一定要会,那些页面的逻辑性脚本要会写,其次,jquery要能看懂,要能灵活运用,到最后,要去使用某个js插件的时候你就能灵活运用了,比如jqgrid啦,ztree啦,其实都是如出一辙
规定要打开的文件或 URL。 mode 必需。规定要求到该文件/流的访问类型。可能的值见下表。 include_path 可选。...规定文件句柄的环境。Context 是可以修改流的行为的一套选项。 mode 参数的可能的值 mode 说明 "r" 只读方式打开,将文件指针指向文件头。...这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。 此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。...这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。 此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。...规定要写入的打开文件。 string 必需。规定要写入文件的字符串。 length 可选。规定要写入的最大字节数。 说明 fwrite() 把 string 的内容写入文件指针 file 处。
= e || event; document.title="X:"+e.clientX+"Y:"+e.clientY; //获取对应的大图的坐标...//将大图的滚动条的位置调整到小图的鼠标坐标的4被的位置 big.scrollLeft = e.clientX\*4-80;...big.scrollTop = e.clientY\*4-80; //让对应的大图显示 big.style.display="block..."; } small.onmouseout = function(){ //鼠标移除之后让你的大图隐藏
//获取月份 31 int day = time.monthDay; //获取日号 32 int hour = time.hour; //获取小时,注意,这里的小时是...24制的 33 int minute = time.minute; //获取分钟 34 int sec = time.second; //获取秒 35 String time_s...= "当前时间为:" + year + "年 " + month + "月 " + day + "日 " + hour + "时 " + minute + "分 " + sec + "秒"; 36...Calendar.HOUR_OF_DAY); //获取小时 int minute = c.get(Calendar.MINUTE); //获取分钟 String time_s = "当前时间为
升级R一直是一件比较痛苦的事情,你需要先安装新的R,然后在逐一安装以前装过的包。最快的办法也是把以前的包文件夹拷到新的R中,然后在新的版本中运行包更新。...由于官方的源一般都提供最新R版本的二进制文件,所以为了更好的稳定性一般也要跟着升级。所以这是一件相对痛苦又不得不做的事情。...现在installr程序包提供了自动化升级的途径,你只需要回答几个问题就可以将R升级至最新版本,同时相应的程序包也会及时的得到更新。...你需要做的只是: install.packages("installr") library(installr) updateR() 然后就会提示最新的R版本,和是否需要拷贝老版本的R程序包目录,是否需要移除老的程序包目录以及是否更新新的版本中的程序包...总的来看,R的升级还是很成功的,使用起来也很方面。
我在使用基于 vue.js 2.0 的UI框架 ElementUI 开发网站的时候 , 就遇到了这种问题 : 一个页面有很多表单 , 我试图将表单写成一个单文件组件 , 但是表单 ( 子组件 ) 里的数据和页面...store.state.show"> export default {} 是不是方便了许多 , 这就是 vuex 最简单的应用..., 不要被网上其他教程吓到 , vuex 原来可以这么简单 !...: dialog_store } }) 这里我们引用了一个 dialog_store.js , 在这个 js 文件里我们就可以单独写 dialog 组件的状态了 : export default...如果还有其他的组件需要使用 vuex , 就新建一个对应的状态文件 , 然后将他们加入 store 文件夹下的 index.js 文件中的 modules 中。
升级R一直是一件比较痛苦的事情,你需要先安装新的R,然后在逐一安装以前装过的包。最快的办法也是把以前的包文件夹拷到新的R中,然后在新的版本中运行包更新。...由于官方的源一般都提供最新R版本的二进制文件,所以为了更好的稳定性一般也要跟着升级。所以这是一件相对痛苦又不得不做的事情。...现在installr程序包提供了自动化升级的途径,你只需要回答几个问题就可以将R升级至最新版本,同时相应的程序包也会及时的得到更新。...你需要做的只是: install.packages("installr") library(installr) updateR() 然后就会提示最新的R版本,和是否需要拷贝老版本的R程序包目录,是否需要移除老的程序包目录以及是否更新新的版本中的程序包...一切搞定之后会提醒你是否需要打开新的RGui,程序会默认将系统的默认R设置为最新版,因此RStudio也会自动切换到最新的R版本。
大家好,又见面了,我是你们的朋友全栈君。...虽然,jQuery已经非常好用了,但是实际的开发项目中,还是有很多限制,比如项目组奇葩的要求,不能使用任何插件,当然,也是考虑插件占用资源,毕竟100+KB对与小型项目来说还是非常大的。...我最近就遇到做个点击展开二级菜单的要求,当然只能用原生的JS去写来实现,我借鉴了网上的一个案例,补充一下,分享一下: 如果,默认打开页面进来时二级菜单是隐藏的,需要点击才能展现二级菜单,再点击就是隐藏二级菜单...这里有两个点,实现展现和隐藏用display=”block“和display=”none”,另外就是要做一个判断,if else的判断当前是block还是none。 <!...如果,你的页面默认进来二级菜单是展现的,点击时才关闭。直接把style标签的样式display=”none”去掉就可以。同时需要修改一下js。
用 Three.js 做这样的一个全景图浏览工具,是再简单不过的事情,只需要几行代码,但却很有用。 那我们就来学一下 Three.js 怎么做全景图浏览吧。...Three.js 基础回顾 我们简单回顾下 Three.js 的基础: Three.js 是通过场景 Scene 来管理 3D 场景中的各种物体的,有一个三维坐标系,每个物体放在不同的位置,然后在某个位置放置相机...这就是 Three.js 的 3D 场景的创建和渲染成 2D 的流程。 简单回顾了下基础,那全景图改怎么浏览呢?.../js/three.js"> <script src="....其实实现全景图浏览更<em>简单</em><em>的</em>方式是直接给 Scene 设置立方体纹理,不用再单独创建立方体或球体,用 CubeTextureLoader 加载六张图,设置到 Scene <em>的</em>背景上就行。
最后决定用pxe + kickstart 的方式完成。原理、方案弄完了之后,开始搭建,结果被DHCP给挡住了。这不就得研究研究最简单最实用的DHCP使用方法。...* 红色的是必须有 * 绿色的是要注意 * 蓝色的是包安装时,要有的程序包 1. DHCP的实现 2....DHCP的实现 DHCP服务必须给本网段提供一个地址池。...4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf # vi dhcpd.conf ddns-update-style interim( 这项不能少,否则服务起不来的...配置文件实例 简单的样例:(红色部分必须有) # vi /etc/dhcp/dhcpd.conf # dhcpd.conf # Sample configuration file for ISC dhcpd
技术是最简单的,最简单的也是技术。有很多事情只有我们经历了明白,有些事情我们可以从别人身上学到,有些则永远学不到。 动画片里的人们以一种预想的方式生活着,这个世界被设定为这样那样。...最简单的是赚钱 在《魁拔妖侠传》开始的时候,对于主人公母亲的一个教诲是: 最简单的是赚钱 无论主人公想去做什么,都会补上一句赚钱是最简单的,不要去想别的。...技术是最简单的 过去一直在想的是提高技术,而提高技术本身而成为了一件有意思的事。 没有太多的工作经验,过去一直试想的是: 当我们技术足够好的话,我们可以很容易地从一个项目切换到另外一个项目。...软件开发者最擅长的就是学习。 上面我们假设了一个前提是——最后两个人有差不多一样的技术领域知识。并不是因为这个工作多年的人不再学习了,而是在这个领域里已经没有足够的领域可以学习了。...人际关系 人际关系是一种复杂的东西,相比于上面的领域知识来说。我们需要去处理和不同人之间的关系,无论是在项目上,还是在哪?但是这真的一点都不简单。 技术才是最简单的。
例如tornado用的是自己的异步非阻塞“wsgi”,flask则只提供了最精简和基本的框架。Django则是直接使用了WSGI,并实现了大部分功能。 2....编写路由 路由都在urls文件里,它将浏览器输入的url映射到相应的业务处理逻辑。 简单的urls编写方法如下图: 编写业务处理逻辑 业务处理逻辑都在views.py文件里。...至此,一个最简单的django编写的web服务就启动成功了。 返回HTML文件 上面我们返回给用户浏览器的是什么?一个字符串!实际上这肯定不行,通常我们都是将html文件返回给用户。...你的CSS,JS和各种插件都可以放置在这个目录里。...至此,一个要素齐全,主体框架展示清晰的django项目完成了,其实很简单是不是?
如果你是设计师,或者在用Adobe的朋友,应该会有所了解 ? 最近在阅读一些PDF文件,和在道客上寻找一些资料,当看到想要的内容时,橙c想把他记录下来,便开始手打到文档上,一天时间也没记录多少内容。...今天给大家推荐一款非常简单的OCR文字识别工具—— ? 所需工具:天若OCR文字识别工具 支持平台:Windows 就是这款--天若OCR文字识别工具 作者是“天若幽心”。...它的操作非常简单,只需要像截图一样选中要识别的区域,就会马上识别出截图中的文字。 ①打开软件,默认快捷键为F4,在任意界面按F4即可调用程序,如果和已有快捷键冲突,可以在设置里面修改。 ?...翻译就是把截取到的文字英文翻译。 ? 如果下载提示要.NET框架的:自已百度下载一个安装一下就行,如果提示缺少请百度下载。 ? 如果按下截图键,出现屏幕放大的情况,请右键属性,禁用dpi的显示缩放。...虽然它是一款个人开发的小工具,但它是通过「在线云识别」来工作的, 截图后通过网络调用百度、腾讯、搜狗、有道等大厂提供的文字识别 API 接口来完成的,并且可以自由选择所调用的借口,这些 API 的技术实力都相当强大
大家好,又见面了,我是你们的朋友全栈君。...//开幕倒计时 var symbol="8月13日" var now = new Date() var diff = -480 - now.getTimezoneOffset() //是北京时间和当地时间的时间差...开幕后计时 var symbol_2="8月13日" var now_2 = new Date() var diff_2 = -480 - now.getTimezoneOffset() //是北京时间和当地时间的时间差...countdown.js v. 1.0 The latest version is available at http://blog.csdn.net/yjgx007 Copyright (c)...window.clearInterval(timer); // 自校验系统时间得到时间差, 并由此得到下次所启动的新定时器的时间nextelapse counter++; var
领取专属 10元无门槛券
手把手带您无忧上云