【how2j练习题】JS部分阶段练习

练习题 1

在这里插入图片描述

<!-- 练习:自定义一个函数,对数组进行排序,要求排序后没有重复数据 -->
<script>function p(s){document.write(s);document.write("<br>");}function uniquel(arr){ var hash=[];for(var i =0;i<arr.length;i++){if(hash.indexOf(arr[i]) == -1){hash.push(arr[i]);}}return hash;}var x = new Array(1,3,4,5,7,7,4,5,6,7,7);p('数组x是'+x);var y = uniquel(x);p('使用sort进行自定义倒排序后的数组x是'+y);</script>

练习题 2

在这里插入图片描述

<!-- 关键字 new Array 创建数组对象 -->
<!--创建数组对象的3种方式:1. new Array()   创建长度是0的数组2. new Array(5)  创建长度是5的数组,但每一个元素都是undefine3.new Array(3,1,4,1,5,9,2,6) 根据参数创建数组
-->
<!-- <script>function p(s,v){document.write(s + ' '+ v);document.write("<br>");}var x = new Array(); // 创建长度是0的数组
p('通过new Array()创建一个空数组:',x);x = new Array(5); //创建长度是5的数组,但每一个元素都是indefine
p('通过new Array(5)创建一个长度为5的数组',x);x = new Array(3,1,4,1,5,9,2,6);//根据参数创建数组
p('创建有初始值的数组new Array(3,1,4,1,5,9,2,6)',x);
</script> --><!-- 属性 length 数组长度 -->
<!-- <script>function p(s){document.write(s);document.write("<br>");}var x = new Array(3,1,4,1,5,9,2,6); // 根据参数创建数组p('当前数组是'+x);p('通过.length获取当前数组的长度'+ x.length)
</script> --><!-- for // for in 遍历一个数组 -->
<!--遍历有两种方式:1.结合for循环,通过下标遍历2.使用增强for in循环遍历
-->
<!-- <script>function p(s){document.write(s);document.write("<br>");}var x = new Array(3,1,4);p('当前数组是'+x);p("使用普通的for循环遍历数组");for(i=0;i<x.length;i++){p(x[i]);}p("使用增强for循环遍历数组");for(i in x){p(x[i]);}
</script> --><!-- 方法concat 连接数组 -->
<!-- <script>function p(s){document.write(s);document.write("<br>");}var x = new Array(3,1,4);var y = new Array(1,5,9);p('数组x是'+x);p('数组y是'+y);var z = x.concat(y);p('使用concat连接数组x和y');p('数组z是'+z);</script> --><!-- 方法join 通过指定分隔符,返回一个数组的字符串表达 -->
<!-- <script>function p(s){document.write(s);document.write("<br>");}var x = new Array(3,1,4);p('数组x是'+x);var y = x.join();p('y = x.join()得到的是数组x的字符串表达。其值是'+y +"其类型是:"+(typeof y));var z = x.join("@");p('z=x.join("@")是x的字符串表达,但是分隔符不是默认的,是@'+z);
</script> --><!-- 方法push插入数据 pop获取数据 分别在最后的位置和(获取后删除) -->
<!-- <script>function p(s){document.write(s);document.write("<br>");}var x = new Array(3,1,4);p('数组x是'+x);x.push(5);p('向x中push 5,得到'+ x);var e = x.pop();p('从x中pop一个值出来,其值是'+e);p('pop之后,x数组的值是'+x);
</script>--><!-- 方法unshift shift 分别在最开始的位置插入数据和获取数据(获取后删除) -->
<!-- <script>function p(s){document.write(s);document.write("<br>");}var x = new Array(3,1,4);p('数组x是'+x);x.unshift(5);p('对数组unshift值加5,数组变为'+x);var e  = x.shift();p('从数组中shift一个数,其值是'+e);p('shift之后,数组变为'+x);
</script> --><!-- 方法sort 对数组内容进行排序 -->
<!-- <script>function p(s){document.write(s);document.write("<br>");}var x = new Array(3,1,4,1,5,9,2,6);p('数组x是'+x);x.sort();p('使用sort排序后的数组x是'+x);d
</script> --><!-- 方法sort(comparator) 自定义排序算法 -->
<!--sort()默认正排序,即小的数排在前面。如果需要采用自定义排序的算法,就把比较器函数作为参数传递给sort()--><!-- <script>function p(s){document.write(s);document.write("<br>");}function comparator(v1,v2){ //比较器函数return v2-v1;}var x = new Array(3,1,4,1,5,9,2,6);p('数组x是'+x);x.sort(comparator);p('使用sort进行自定义倒排序后的数组x是'+x);
</script> --><!-- 练习:自定义一个函数,对数组进行排序,要求排序后没有重复数据 -->
<!-- <script>function p(s){document.write(s);document.write("<br>");}function uniquel(arr){ var hash=[];for(var i =0;i<arr.length;i++){if(hash.indexOf(arr[i]) == -1){hash.push(arr[i]);}}return hash;}var x = new Array(1,3,4,5,7,7,4,5,6,7,7);p('数组x是'+x);var y = uniquel(x);p('使用sort进行自定义倒排序后的数组x是'+y);</script> --><!-- 方法 reverse,对数组的内容进行反转 -->
<!-- <script>function p(s){document.write(s);document.write("<br>");}var x = new Array(3,1,4,1,5,9,2,6);p('数组x是'+x);x.reverse();p('使用reverse函数进行反转后的值是:'+x);
</script> --><!-- 方法slice获取子数组 注意:第二个参数取不到-->
<!-- <script>function p(s){document.write(s);document.write("<br>");}var x = new Array(3,1,4,1,5,9,2,6);
p('数组x是:'+x);
var y = x.slice(1);
p('x.slice(1)获取的子数组是:'+y);
var z = x.slice(1,3);
p('x.slice(1,3)获取的子数组是:'+z);
p('第二个参数取不到');
</script> --><!-- 方法splice用于删除数组中元素
而且同时还能向数组中插入元素 -->
<!-- <script>function p(s){document.write(s);document.write("<br>");}var x = new Array(3,1,4,1,5,9,2,6);p('数组x是'+x);x.splice(3,2);p('x.splice (3,2) 表示从位置3开始 ,删除2个元素:'+x);x.splice(3,0,1,5);p('x.splice(3,0,1,5) 从位置3开始,删除0个元素,但是插入15,最后得到:'+x);
</script> --><!--完成字符串替换功能--><html><script>function getValue(id){return document.getElementById(id).value; //获得不同id的多选框里输入的内容}function setValue(id,value){document.getElementById(id).value = value; //根据id修改不同多选框里的内容}function get1(){var text1 = getValue("text1");//获得第一个多选框里的结果var a = new Array();//新创建一个数组for(var i =0;i<text1.length;i++){var c = text1.charAt(i); //获得每个位置上的字符a.push(c);  //把c里的内容加到空的数组a里面}a.sort(); //对a中的内容进行排序var text2 = a.join(""); // 把数组a的内容转换成字符串形式setValue("text2",text2);//把id为text2的文本框里填入text2里的内容a.reverse();//倒序输出var text3 = a.join("")setValue("text3",text3);}function get2(){var text1 = getValue("text1");//获得第一个多选框里的结果var a = text1.split(" "); //把第一个多选框里的字母用空格隔开a.sort();//对a中的内容进行排序var text2 = a.join(" ");//转为字符串类型setValue("text2",text2);//把id为text2的文本框里填入text2里的内容a.reverse();//倒序输出var text3 = a.join(" ")setValue("text3",text3);}</script><table border="0"><tr><td>随机输入英文字符串:	</td><td><textarea id="text1"></textarea></td></tr><tr><td>正排序结果:</td><td><textarea id="text2"></textarea></td></tr><tr><td>倒排序结果:</td><td><textarea  id="text3"></textarea></td></tr><tr><td></td><td><button onclick="get1()" >按照字母排序</button></td></tr><tr><td></td><td></br><button onclick="get2()" >按照单词排序</button></td></tr></table>
</html>

练习题 3

在这里插入图片描述

<!-- 练习-计算年龄 --><html><script>// 循环输出年月日函数function initSelect(obj,start,end){for(var i = start ; i<=end ; i++) {// 在obj对象下添加条目,文本为i,值为iobj.options.add(new Option(i,i))}}//年、月输出天数的函数function selectYmd(){//用getElementById()方法,返回指定id的元素//返回年var yy  = document.getElementById("years");//返回月var mm  = document.getElementById("months");//返回日var dd  = document.getElementById("dates");//将月的value转换成数字类型,便于比较var m = parseInt(mm.value);//生名最后天数,用于接收判断结果var dayEnd;//判断并输出天数if(m == 4 || m == 6 || m==9 || m==11){dayEnd = 30;}else if(m==2){datEnd = 28;  // 2月28天y = parseInt(yy.value); //闰年29天if((y%4==0&&y%100!=0)||(y%400==0)){dayEnd = 29;}}else{dayEnd = 31;}//删除已经输出的31天dd.options.length = 0;//重新判断输出的天数,dayEnd为最后一天initSelect(dd,1,dayEnd);}//函数Ymd() 增加下拉年、月、日的条件function ymd(){//获取时间Date对象,用于处理日期和时间var d = new Date();//获取当前年份var nowYear = d.getFullYear();//用getElementById()方法,返回指定id的元素//返回年var yy  = document.getElementById("years");//返回月var mm  = document.getElementById("months");//返回日var dd  = document.getElementById("dates");//调用initSelect()函数//输出年下拉框的年份,从1999-今年initSelect(yy,1999,nowYear);initSelect(mm,1,12);initSelect(dd,1,31);}//函数calculateAge 计算年龄function calculateAge(){// 1.获取当前日期var currentDate = new Date();//获取当前日期中的当前年currentYear = currentDate.getFullYear();//获取当前日期中的当前月(从0开始要+1)currentMonth = currentDate.getMonth()+1;//获取当前日期中的当前日currentDate = currentDate.getDate();//2.获取下拉框里的日期信息//2.1.首先获得下拉框的节点对象var selectY = document.getElementById("years");//2.在获得下拉框所有的option的节点对象var optionsY = selectY.options;//3.获得当前选中的option的索引var indexY = selectY.selectedIndex;//4.获得当前选中的option的文本内容 使用option[index]下标的方法得到当前选中的optionvar selectedYear = optionsY[indexY].text;//2.获取下拉框里的日期信息//2.1.首先获得下拉框的节点对象var selectM = document.getElementById("months");//2.在获得下拉框所有的option的节点对象var optionsM = selectM.options;//3.获得当前选中的option的索引var indexM = selectM.selectedIndex;//4.获得当前选中的option的文本内容 使用option[index]下标的方法得到当前选中的optionvar selectedMonth = optionsM[indexM].text;//2.获取下拉框里的日期信息//2.1.首先获得下拉框的节点对象var selectD = document.getElementById("dates");//2.在获得下拉框所有的option的节点对象var optionsD = selectD.options;//3.获得当前选中的option的索引var indexD = selectD.selectedIndex;//4.获得当前选中的option的文本内容 使用option[index]下标的方法得到当前选中的optionvar selectedDate = optionsD[indexD].text;//当前年份和框中年份相减,输出当前的年份var age = currentYear - selectedYear;// 如果当前日期在出生日期之前,通过比较月份和日期的差异,将年龄减1if (currentMonth < selectedMonth ||(currentMonth === selectedMonth &&currentDate < selectedDate)) {age--;}document.write('今年'+age +'岁');// var age2 = currentMonth - selectedMonth;// var age3 = currentDate - selectedDate;// document.write(age2);// document.write(age3);}</script>
<!-- onload 刷新加载页面,执行ymd()函数 --><body onload="ymd()"><h3>请输入出生年月日</h3></br><form action=""><!-- onchange()事件,当用户改变年、月时,触动函数selectYmd()函数 --><select name = "years" id ="years" onchange="selectYmd()"></select><select name = "months" id ="months" onchange="selectYmd()"></select><select name = "datas" id ="dates"></select></form></br><button onclick="calculateAge()">计算年龄</button></body></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java源值1.5已过时,将在未来所有发行版中删除

1、背景 确认java项目没问题&#xff0c;但是启动的时候&#xff0c;却报错&#xff1a;java: -source 1.5 中不支持 diamond 运算符 2、解决 2.1 2.2 2.3 2.4 2.5

拓数派向量计算引擎PieCloudVector助力东吴证券AIGC应用升级

1.项目背景 随着人工智能技术的不断创新和应用&#xff0c;我们可以看到人工智能在各个领域的应用越来越广泛。深度学习技术在图像识别、语音识别、自然语言处理等领域表现出色。机器学习算法的改进将解决更多实际问题&#xff0c;如增强学习、迁移学习和联合学习等&#xff0…

蓝桥杯 - 受伤的皇后

解题思路&#xff1a; 递归 回溯&#xff08;n皇后问题的变种&#xff09; 在 N 皇后问题的解决方案中&#xff0c;我们是从棋盘的顶部向底部逐行放置皇后的&#xff0c;这意味着在任何给定时间&#xff0c;所有未来的行&#xff08;即当前行之下的所有行&#xff09;都还没…

算法学习——LeetCode力扣动态规划篇9(1035. 不相交的线、53. 最大子数组和、392. 判断子序列、115. 不同的子序列)

算法学习——LeetCode力扣动态规划篇9 1035. 不相交的线 1035. 不相交的线 - 力扣&#xff08;LeetCode&#xff09; 描述 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#x…

matlab使用教程(33)—求解时滞微分方程(1)

1.时滞微分方程(DDE)的分类 时滞微分方程 (DDE) 是当前时间的解与过去时间的解相关的常微分方程。该时滞可以固定不变、与时间相关、与状态相关或与导数相关。要开始积分&#xff0c;通常必须提供历史解&#xff0c;以便求解器可以获取初始积分点之前的时间的解。 1.1常时滞 D…

【MATLAB源码-第176期】基于matlab的16QAM调制解调系统频偏估计及补偿算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在通信系统中&#xff0c;频率偏移是一种常见的问题&#xff0c;它会导致接收到的信号频率与发送信号的频率不完全匹配&#xff0c;进而影响通信质量。在调制技术中&#xff0c;QPSK&#xff08;Quadrature Phase Shift Keyin…

LeetCode每日一题之专题一:双指针 ——复写零

复写零OJ链接&#xff1a;1089. 复写零 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 解法&#xff08;原地复写-双指针&#xff09;&#xff1a; 算法思路&#xff1a; 如果「从前向后」进⾏原地复写操作的话&#xff0c;由于 0 的出现会复写两次&#xff0c;导致…

java 数据结构 Map和Set

目录 搜索树 操作-查找 操作-插入 操作-删除&#xff08;难点&#xff09; Map Map 的常用方法 Set 哈希表 哈希函数 哈希冲突 冲突-避免-负载因子调节&#xff08;重点掌握&#xff09; 冲突-解决 冲突-解决-开散列/哈希桶(重点掌握) 实现HashBuck类 put方法 …

C#清空窗体的背景图片

目录 一、涉及到的知识点 1.设置窗体的背景图 2.加载窗体背景图 3.清空窗体的背景图 二、 示例 一、涉及到的知识点 1.设置窗体的背景图 详见本文作者的其他文章&#xff1a;C#手动改变自制窗体的大小-CSDN博客 https://wenchm.blog.csdn.net/article/details/137027140…

AI结合机器人的入门级仿真环境有哪些?

由于使用真实的机器人开发和测试应用程序既昂贵又费时&#xff0c;因此仿真已成为机器人应用程序开发中越来越重要的部分。在部署到机器人之前在仿真中验证应用程序可以通过尽早发现潜在问题来缩短迭代时间。通过模拟&#xff0c;还可以更轻松地测试在现实世界中可能过于危险的…

C# 登录界面代码

背景 MVVM 是一种软件架构模式&#xff0c;用于创建用户界面。它将用户界面&#xff08;View&#xff09;、业务逻辑&#xff08;ViewModel&#xff09;和数据模型&#xff08;Model&#xff09;分离开来&#xff0c;以提高代码的可维护性和可测试性。 MainWindow 类是 View&a…

【星计划★C语言】c语言初相识:探索编程之路

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;星计划★C语言、Linux实践室 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️第一个c语言程序二. ⛳️数据类型2.1 &#x1f514;数据单位2.2 &…

哲♂学家带你深♂入了解动态顺序表

前言&#xff1a; 最近本哲♂学家学习了顺序表&#xff0c;下面我给大家分享一下关于顺序表的知识。 一、什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组 上完成数据的增删查改。 顺序表&#xff…

C++从入门到精通——入门知识

1. C关键字(C98) C总计63个关键字&#xff0c;C语言32个关键字 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称都将存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的就是对标识符的名…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(8)复发

PS从入门到精通视频各类教程整理全集&#xff0c;包含素材、作业等 最新PS以及插件合集&#xff0c;可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制&#xff0c;今天先分享到这里&#xff0c;后续持续更新 B站-PS异闻录&#xff1a;萌新系统入门课课程视频 …

大模型论文阅读:ADAPTIVE BUDGET ALLOCATION FOR PARAMETEREFFICIENT FINE-TUNING

大模型论文阅读:ADAPTIVE BUDGET ALLOCATION FOR PARAMETEREFFICIENT FINE-TUNING 论文链接:https://arxiv.org/pdf/2303.10512v1.pdf 当存在大量下游任务时,微调所有预训练模型的参数变得不可行。因此,为了以参数高效的方式学习预训练权重的增量更新,提出了许多微调方法,…

【并发编程】CountDownLatch

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳中求进&#xff0c;晒太阳 CountDownLatch 概念 CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。 CountDownLatch 定义了一个计数器&#xff0c;…

【每日一道算法题】移除链表节点

这里写自定义目录标题 【每日一道算法题】移除链表元素思路记录我的代码力扣官方题解递归迭代 【每日一道算法题】移除链表元素 力扣题目链接(opens new window) 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xf…

arm的状态寄存器

目录 一、arm 的 PSRs二、CPSR2.1 CPSR_cxsf 三、SPSR四、APSR 一、arm 的 PSRs arm 中有很多程序状态寄存器&#xff08;Program Status Registers&#xff0c;PSRs&#xff09;用于存储处理器的状态信息&#xff0c;包括 CPSR\SPSR\FPSR\APSR 等&#xff1a; CPSR&#xff…

Vue3配置router路由步骤

Vue3配置router路由步骤 首先创建一个vue3的项目 先检查一下router的版本&#xff0c;可以在pakage.json里面查看&#xff0c;也可以你直接在终端输入 npm list vue-router如果版本比较低的话&#xff0c;先升级一下 vue3的话&#xff0c;用以下命令 npm install vue-route…