统计字符串 'abcoefoxyozzopp' 中每个字符出现的次数
1.遍历字符串,获取里面的每一个字符 --- 字符串的本质是字符数组
2.根据遍历到字符
- 如果这个字符所对应的键在对象中存在,就将数量+1
- 如果字符不存在,就添加一个新的键值,键就是这个字符,值就是1
// 统计字符串 'abcoefoxyozzopp' 中每个字符出现的次数(字符串可以随意设置啊)
// 将功能封装为函数
let str = 'aaabadfasdfasjdfjashdfkjashdflkj'
// {'a':2,'b':3,'c':1,'e':3}
let obj = {}
for (let i = 0; i < str.length; i++) {
// str[i]
let s = str[i] // a
// 判断当前对象是否有这个值所对应的键
if (obj[s]) {
obj[s] = obj[s] + 1
} else {
obj[s] = 1
}
}
console.log(obj)
`
一:转换字符串大小写的基本api
二:获取需要进行转换的单词
三:遍历数组,获取每一个字符串单词,对单词进行如下操作:
// 封装一个函数,实现功能:往函数传参为该格式字符串:'get-elements-by-class-name',得到驼峰命名法的返回值为‘getElementsByClassName’
function exchange(str) {
let result = ''
// 进行字符串的分隔,使用split方法,分割之后返回一个数组
let arr = str.split('-') // ['GET', 'elemenTs', 'bY', 'cLAss', 'nAMe']
// 遍历数组,去处理其中的每一个单词
arr.forEach(function(value,index) {
if(index == 0){
// 第一个单词转换为小写
result += value.toLowerCase()
}else{
// 后面的单词:取出第一个字符转大写,其它的字符转小写,进行拼接
result += value[0].toUpperCase() + value.substr(1).toLowerCase()
}
})
return result
}
console.log(exchange('GET-elemenTs-bY-cLAss-nAMe'))
`
获取查询参数部分:以?做为分割---split('?')
再将字符串使用&符号进行分割---split('&')
遍历数组,获取每一个值,每一个值应该对着一组 键值对
function exchange(str) {
let obj = {}
// 浏览器地址栏中的地址称为 url
// 如果在url地址进行参数的拼接,那么拼接的参数称为 查询字符串
// 这种参数有一个标识: ?,将 ?及?后面的统一称为查询参数
// 有一个url(字符串)如下: http://www.heima.com?key0=haha&key1=hello&key2=xixi ; 要求处理此url,
得到一个如下格式的对象: let obj = { key0:’haha’, key1:’hello’, key2:’xixi’ }
let search = str.split('?')[1] // key0=haha&key1=hello&key2=xixi
// 将字符串再次进行分割
let arr = search.split('&') // ['key0=haha', 'key1=hello', 'key2=xixi']
// 遍历
arr.forEach(function(value) {
// console.log(value) // key0=haha
let temp = value.split('=') // ['key0', 'haha']
let k = temp[0],
v = temp[1]
// 第一个元素(索引0)就是对象的键,第二个元素(索引1)就是对象的值
obj[k] = v // {key0:'haha'}
// obj[temp[0]] = temp[1]
})
return obj
}
`
一:遍历对象 -- for ...in
二:拼接字符串
// {id:1000,bookname:'你好呀'} 》》id=1000&bookname=你好呀
function parseObjToString(obj) {
let str = ''
// 1.遍历对象
// key:对象的键
for (let key in obj) {
console.log(key, obj[key])
str += `&${key}=${obj[key]}`
}
// console.log(str.substr(0, str.length - 1))
// console.log(str.substr(1))
return str.substr(1)
}
`
// 不止一个用户调用这个方法获取这个数据实现渲染
// 有一个模拟数据:只有这个方法可以获取到数据
// 1.方法并不能决定数据如何渲染
// callback:回调函数
function getData(callback) {
let arr = [123, 12, 3, 234, 34, 54, 64, 6]
callback(arr)
}
// 0-----------------------------------
// 实现动态渲染
function render(arr) {
let str = ''
arr.forEach(function(value) {
str += `<li>${value}</li>`
})
document.querySelector('ul').innerHTML = str
}
// 调用一个函数A,传入一个函数B做为参数,函数B就称为回调函数
// 1.回调函数是我们准备的
// 2.回调函数不是我们自己调用,而是在函数A中调用
function render2(arr) {
console.log(arr)
let str = ''
arr.forEach(function(value) {
str += `<p>${value}</p>`
})
document.querySelector('div').innerHTML = str
}
// 现在我们需要调用这个方法,实现数据的动态渲染
// 我调用这个方法获取数据,我当前清楚数据应该如何处理 --- 我有数据吗?
// 当我调用方法获取数据的时候,我将数据的处理方式传递给函数
getData(render)
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我有一个任务列表(名称、starts_at),我试图在每日View中显示它们(就像iCal)。deftodays_tasks(day)Task.find(:all,:conditions=>["starts_atbetween?and?",day.beginning,day.ending]end我不知道如何将Time.now(例如“2009-04-1210:00:00”)动态转换为一天的开始(和结束),以便进行比较。 最佳答案 deftodays_tasks(now=Time.now)Task.find(:all,:conditio
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG
什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相
提供3种Ubuntu系统安装微信的方法,在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信:ubuntu20.04安装最新版微信--可以支持微信最新版,但是适配的不是特别好;比如WeChartOCR.exe报错。2.原生微信安装:linux系统下的微信安装(ubuntu20.04)--微信适配的最好,反应最快,但是微信版本只到2.1.1,版本太老,很多功能都没有。3.深度deepin-wine6安装微信:ubuntu20.04+系统deepin-wine6安装新版微信--综合比较好,当前个人使用此种方法1个月,微信版本3.4;没什么大问题,尚可。一、WineHQ7.0安装微信
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如