本节作业之封装自己的数学对象、猜数字、倒计时效果、筛选数组、数组去重、返回字符位置、统计出现最多的字符和次数

1 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 min = 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));
console.log(myMath.min(1,5,9));

在这里插入图片描述

猜数字游戏

程序随机生成一个1~10之间的数字,并让用户输入一个数字。
1.如果大于该数字,就提示:数字大了,继续猜。
2.如果小于该数字,就提示:数字小了,继续猜。
3.如果等于该数字,就提示:猜对了,结束程序。
// 案例分析
// 1.随机生成一个1~10的整数,我们需要用到Math.random()方法
// 2.需要一直猜到正确为止,所以一直循环
// 3.用while循环合适,更简单
// 4.核心算法:使用if else if多分支语句来判断大于、小于、等于

function getRandom(min, max) {
	return Math.floor(Math.random() * (max - min + 1)) + min;
}
var random = getRandom(1,10);
while(true) { //死循环
	var num = prompt('你来猜?\n输入1~10之间的一个数字');
    if (num > random) {
    	alert('数字大了');
    } else if (num < random) {
        alert('数字小了');
    } else {
        alert('猜对了!');
        break; // 退出整个循环,结束程序
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

要求用户猜1~50之间的一个数字,但是只有10次猜的机会

function getRandom(min, max) {
	return Math.floor(Math.random() * (max - min + 1)) + min;
}
var random = getRandom(1,50);
for (var i = 1; i <= 10; i++) {
	var num = prompt('你来猜?\n输入1~50之间的一个数字');
	if (num > random) {
		alert('数字大了');
    } else if (num < random) {
        alert('数字小了');
    } else {
        alert('猜对了!');
        break; // 退出整个循环,结束程序
    }
    if (i == 10) {
        alert('抱歉,你的次数已用完');
    }
}

2 Date对象案例

倒计时效果

// 案例分析
// 1.核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时,但是不能拿着时分秒相减,比如05分减去25分,结果会是负数
// 2.用时间戳来做。用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数
// 3.把剩余时间总的毫秒数转换为天、时、分、秒(时间戳转换为时分秒)

在这里插入图片描述

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 = d < 10 ? '0' + d : d;
    var h = parseInt(times / 60 / 60 % 24); // 小时
    h = h < 10 ? '0' + h : h;
    var m = parseInt(times / 60 % 60); // 分钟
    m = m < 10 ? '0' + m : m;
    var s = parseInt(times % 60); // 秒
    s = s < 10 ? '0' + s : s;
    return d + '天' + h + '时' + m + '分' + s + '秒';
}
console.log(countDown('2022-12-1 20:00:00'));

在这里插入图片描述

3 数组对象案例

筛选数组

// 有一个包含工资的数组[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[newArr.length] = arr[i];
        newArr.push(arr[i]);
	}
}
console.log(newArr);

在这里插入图片描述

★★数组去重★★

// 有一个数组['c','a','z','a','x','a','x','c','b'],要求去除数组中重复的元素
// 案例分析:
// 1.目标:把旧数组里面不重复的元素选取出来放到新数组中,重复的元素只保留一个,放到新数组中去重
// 2.核心算法:我们遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素在新数组里面没有出现过,我们就添加,否则不添加
// 3.我们怎么知道该元素有没有存在?利用新数组.indexOf(数组元素) 如果返回-1就说明新数组里面没有该元素

// 封装一个去重的函数 unique 独一无二的
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);

在这里插入图片描述

4 字符串对象案例

返回字符位置

// 查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数
// 1.核心算法:先查找第一个o出现的位置
// 2.然后只要indexOf返回的结果不是-1,就继续往后查找
// 3.因为indexOf只能查找到第一个,所以后面的查找,利用第二个参数,当前索引加1,从而继续查找
var str = 'abcoefoxyozzopp';
var index = str.indexOf('o');  
var num = 0; 
while (index !== -1) {
	console.log(index);
	num++;
	index = str.indexOf('o', index + 1);
}
console.log('o出现的次数是:' + num);

在这里插入图片描述

// 课后作业
// ['red','blue','red','green','pink','red'],求red出现的位置和次数
var arr = ['red','blue','red','green','pink','red'];
var index = arr.indexOf('red');  
var num = 0; 
while (index !== -1) {
	console.log(index);
	num ++;
	index = arr.indexOf('red', index + 1);
}
console.log('red出现的次数是:' + num);

在这里插入图片描述

统计出现最多的字符和次数

//判断一个字符串'abcoefoxyozzopp'中出现次数最多的的字符,并统计其次数
// 1.核心算法:利用charAt()遍历整个字符串
// 2.把每个字符都存储给对象,如果对象没有该属性,就为1,如果存在了就+1
// 3.遍历对象,得到最大值和该字符
var str = 'abcoefoxyozzopp';
var o = {};
for (var i = 0; i < str.length; i++) {
	var chars = str.charAt(i); // chars是字符串的每一个字符
	if(o[chars]) {
		// o[chars]得到的是属性值
		o[chars]++;
	} else {
		o[chars] = 1;
	}
}
console.log(o);
//遍历对象
var max = 0;
var ch = '';
for (var k in o) {
	// k得到的是属性名
	// o[k]得到的是属性值
	if(o[k] > max) {
		max = o[k];
		ch = k;
	}
}
console.log(max);
console.log('出现最多的字符是:'+ ch);

在这里插入图片描述

综合作业题

// 给定一个字符串,如:'abaasdffggghhjjkkgfddsssss3444343',问题如下:
var str = 'abaasdffggghhjjkkgfddsssss3444343';
// 1.字符串的长度
console.log('字符串长度为:' + str.length);
// 2.取出指定位置的字符,如:0,3,5,9等
console.log('索引为0的字符为:' + str.charAt(0));
console.log('索引为3的字符为:' + str.charAt(3));
console.log('索引为5的字符为:' + str.charAt(5));
console.log('索引为9的字符为:' + str.charAt(9));
// 3.查找指定字符是否在以上字符串中存在,如:i,c,b等
if(str.indexOf('i') !== -1) {
	console.log('i在以上字符中存在!');
} else{
    console.log('i在以上字符中不存在!');
}
if(str.indexOf('c') !== -1) {
	console.log('c在以上字符中存在!');
} else{
    console.log('c在以上字符中不存在!');
}
if(str.indexOf('b') !== -1) {
    console.log('b在以上字符中存在!');
} else{
    console.log('b在以上字符中不存在!');
}
// 4.替换指定的字符,如:g替换为22, ss替换为b等操作方法
console.log('g替换为22后字符串变为:' + str.replace('g','22'));
console.log('ss替换为b后字符串变为:' + str.replace('ss','b'));
// 5.截取指定开始位置到结束位置的字符串,如:取得1-5的字符串
console.log('截取索引号1-5的字符串为:' + str.slice(1,5));
// 6.找出以上字符串中出现次数最多的字符和出现的次数
var o = {}; // 定义一个空对象
for (var i = 0; i < str.length; i++) {
	var chars = str.charAt(i); // chars是遍历后的每一个字符
    // 如果字符不存在,属性值为1;如果存在那么属性值加1
    if (o[chars]) {
    	o[chars]++;
    } else {
        o[chars] = 1;
    }
}
console.log(o); //输出对象o
// 遍历对象
var max = 0; // 定义一个最大值,初始值为0
var ch = ''; // 定义一个空字符串
// 开始遍历
for (var k in o) {
	if (o[k] > max) {
    	max = o[k]; // 将o[k]属性值赋值给max
        ch = k; // 将k属性名赋值给ch
    }
}
console.log(max);
console.log('出现次数最多的字符是:' + ch);

在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王小王几点了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值