内置对象练习
Posted 速速逃离月球表面
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内置对象练习相关的知识,希望对你有一定的参考价值。
Math 对象
- 利用对象封装自己的数学对象 里面有 PI 最大值和最小值
var myMath = {
PI: 3.141592653,
max: function () {
var max = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
},
min: function () {
var max = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (arguments[i] < min) {
min = arguments[i];
}
}
return min;
}
}
console.log(myMath.PI)
console.log(myMath.max(1, 5, 9))
- 猜数字游戏
程序随机生成一个 1~ 10 之间的数字,并让用户输入一个数字,- 如果大于该数字,就提示,数字大了,继续猜;
- 如果小于该数字,就提示数字小了,继续猜;
- 如果等于该数字,就提示猜对了, 结束程序。
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var random = getRandom(1, 10);
while (true) { //死循环
var num = prompt('你来猜?输入1-10之间的一个数字');
if (num > random) {
alert('数字大了,继续猜')
} else if (num < random) {
alert('数字小了,继续猜')
} else {
alert('猜对了!!!该数字是' + num)
break
}
}
Date对象
- 制作一个端午节的倒计时(要熟练使用)
分析:
- 核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时 ,但是不能拿着时分秒相减,比如 05 分减去25分,结果会是负数的。
- 用时间戳来做。用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数。
- 把剩余时间总的毫秒数转换为天、时、分、秒 (时间戳转换为时分秒)
转换公式如下:
d = parseInt(总秒数/ 60/60 /24); // 计算天数
h = parseInt(总秒数/ 60/60 %24) // 计算小时
m = parseInt(总秒数 /60 %60 ); // 计算分数
s = parseInt(总秒数%60); // 计算当前秒数
在JS界面:
function countDown(time) {
var nowTime = +new Date() //获取当前日期时间--->转换成毫秒
var inputTime = +new Date(time) //创建给定的日期时间对象
var times = (inputTime - nowTime) / 1000 //将两个日期时间差转换成秒 除以1000-->毫秒转换成秒
var d = parseInt(times / 60 / 60 / 24)
d < 10 ? '0' + d : d
var h = parseInt(times / 60 / 60 % 24)
h < 10 ? '0' + h : h
var m = parseInt(times / 60 % 60)
m < 10 ? '0' + m : m
var s = parseInt(times % 60)
s < 10 ? '0' + s : s
var str = d + '天' + h + '时' + m + '分' + s + '秒'
// 通过id获取页面中的span标签,将倒计时字符串放到该标签中
document.getElementById('mydate').innerhtml = str
// 调用setTimeout函数(定时器函数),每隔1秒钟调用countDown函数,来实现倒计时
setTimeout("countDown('2021-06-14')", 1000)
}
// console.log(countDown('2021-6-14'))
在HTML界面:
<body onload="countDown('2021-06-14')">
<span id="mydate" style="color: red;font-size: 35px;"></span>
</body>
- 练习:“三天打鱼两天晒网” (要熟练使用)
假设:2008-5-12某个人在打渔,那么今天他应该是打渔还是晒网
function countDown(time) {
var nowTime = +new Date()
var inputTime = +new Date(time)
var times = (nowTime - inputTime) / 1000
var d = parseInt(times / 60 / 60 / 24)
if (d % 5 == 0 || d % 5 == 1 || d % 5 == 2) {
return 1
} else {
return 0
}
}
if (countDown('2008-05-12') == 1) {
console.log('他今天应该打渔')
} else {
console.log('他今天应该晒网')
}
Array对象
- 筛选数组 (要熟练使用)
有一个包含工资的数组[1500, 1200, 2000, 2100, 1800],要求把数组中工资超过2000的删除,剩余的放到新数组里面
var arr = [1500, 1200, 2000, 2100, 1800];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < 2000) {
newArr.push(arr[i]);
}
}
console.log(newArr);
- 数组去重==(重点案例)==(要熟练使用)
有一个数组[‘c’, ‘a’, ‘z’, ‘a’, ‘x’, ‘a’, ‘x’, ‘c’, ‘b’],要求去除数组中重复的元素。
分析:
- 目标:把旧数组里面不重复的元素选取出来放到新数组中,重复的元素只保留一个,放到新数组中去重。
- 核心算法:遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素在新数组里面没有出现过就添加,否则不添加。
- 怎么知道该元素没有存在? 利用 新数组.indexOf(数组元素) 如果返回时 -1 就说明 新数组里面没有改元素
旧数组[‘c’, ‘a’, ‘z’, ‘a’, ‘x’, ‘a’, ‘x’, ‘c’, ‘b’]
新数组 [ ]
function unique(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
var demo = unique(['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'])
console.log(demo)
String对象
- 统计出现最多的字符和次数 (要熟练使用)
案例需求:使用charAt()方法通过程序来统计字符串中出现最多的字符和次数
var str = 'Apple'
// 1.统计每个字符出现的次数
var o = {}
for (var i = 0; i < str.length; i++) {
var chars = str.charAt(i) //利用chars保存字符串中的每一个字符
if (o[chars]) {
o[chars]++
} else {
o[chars] = 1
}
}
// 2.统计出现最多的字符
var max = 0
var ch = ''
for (var k in o) {
if (o[k] > max) {
max = o[k]
ch = k
}
}
console.log('出现最多的字符是:' + ch + ',共出现了' + max + '次')
console.log(o)
- 输入一个由字母组成的字符串,统计串中每个字母出现的次数(用一维数组,每个数组单元对应每个字母出现的次数)(要熟练使用)
- 串中包含有大写、小写字母
- 定义两个数组:lower = new Array(26),upper = new Array(26)
var arr = prompt('请输入一个字符串:')
var newArr = []
// var a = []
for (var i = 0; i < arr.length; i++) {
// var char = arr.charAt(i)
for (var j = 0; j < a[i].length; j++) {
if (a[j] == a[i]) {
newArr[i] += 1
} else {
a[i] = arr[i]
newArr[i] = 1
}
}
}
console.log(newArr)
var str = prompt('请输入一个字符串')
var lower = new Array(26) //存放26个小写字母各自出现的次数
var upper = new Array(26) //存放26个大写字母各自出现的次数
// 初始化两个数组
for (var i = 0; i < 26; i++) {
lower[i] = 0
upper[i] = 0
}
// 对输入的字符串进行遍历
for (var k = 0; k < str.length; k++) {
if (str.charAt(k) >= 'a' && str.charAt(k) <= 'z') { //判断取出的字母是不是在小写字母的范围内
lower[str.charCodeAt(k) - 97]++ //a的ascll码值为97,取索引为k的ascll码值
} else if (str.charAt(k) >= 'A' && str.charAt(k) <= 'Z') { //大写字母
upper[str.charCodeAt(k) - 65]++
}
}
console.log(lower)
console.log(upper)
var str = prompt('请输入一个字符串')
var lower = new Array(26)
var upper = new Array(26)
for (var i = 0; i <= 26; i++) {
if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') {
lower[str.charCodeAt(i) - 97]++
} else if (str.charAt(i) >= 'A' &&)
}
- 输入一个十进制的整数和一个数制(2或8或16),将该十进制的整数转换成对应的数制格式输出 (要熟练使用)
取余法:来求得数制转换中的余数
例:m=15 k=8
m%k 将余数存放在数组中
var m = parseInt(prompt('请输入一个整数:'))
var k = parseInt(prompt('请输入一个数制(2~16):'))
// 字符数组
var result = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
var arr = new Array(128) //可以改,比如十进制转成二进制最多可以转128位,存放数制转换的结果
var i = 0
while (m != 0) { //对m进行数制转换,将余数放在arr数组中
arr[i] = m % k
m = parseInt(m / k)
i++
}
var str = ''
if (k == 8) {
str = '0' //初始化放进去一个0
} else if (k == 16) {
str = '0x'
}
for (var j = i - 1; j >= 0; j--) { //因为i表示arr数组的长度,故表示下标时要-1
str += result[arr[j]] //将arr数组的元素作为result数组的下标/索引
}
console.log('转换的结果为:' + str)
以上是关于内置对象练习的主要内容,如果未能解决你的问题,请参考以下文章