JavaScript入门到放弃Day6——课后作业×7+面试经典题×3...量多单独整理成一篇。

每日作业-JavaScript第06天 文章目录
1.1 数组操作
1.2 计算指定日期是今年的第几天
1.3 16进制随机颜色,
1.4 字符串操作
2.1 随机选学员
2.2 随机排序

1 - 基础作业 1.1 数组操作
? 题目描述:把下面数组的首尾两个元素互换
? var arr = [“鹿晗”,“王俊凯”,“蔡徐坤”,“彭于晏”,“周杰伦”,“刘德华”,“赵本山”];

var arr = ["鹿晗", "王俊凯", "蔡徐坤", "彭于晏", "周杰伦", "刘德华", "赵本山"]; console.log(arr.splice(0, 1, '赵本山')); //取走第0个元素,插入赵本山 console.log(arr.splice(6, 1, '鹿晗')); //取走第6个元素,插入鹿晗 console.log(arr);

1.2 计算指定日期是今年的第几天
? 题目描述:制作一个函数,getDayNum( 年月日日期 ),可以返回指定日期是当前年的第几天
? 例: getDayNum( “2019-1-2”) 返回值为:2
// 1.判断是闰年还是平年 function isRun(year) { var flag = false; if ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0)) { return flag = true; } }function get_day(year, month, day) { var days = day; for (var i = 1; i < month; i++) { switch (i) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days += 31; break; case 4: case 6: case 9: case 11: days += 30; break; case 2: if (isRun(year)) { days += 29; } else { days += 28; } break; } } return days; } var year = Number(prompt("请输入多少年:")); var month = Number(prompt("请输入月份:")); var day = Number(prompt("请输入几号:")); var result = get_day(year, month, day); document.write(result);

1.3 16进制随机颜色,
? 题目描述:使用Math对象,制作一个16进制的随机颜色
【JavaScript入门到放弃Day6——课后作业×7+面试经典题×3...量多单独整理成一篇。】? 题目提示:16进制包括 “ 0 1 2 3 4 5 6 7 8 9 A B C D E F ”
? 例: “#f23a4b”
// 随机获取颜色值 function getColor() { var str = "#"; for (var i = 0; i < 6; i++) { // toString(16) == 转为16进制数字 // Math.floor(Math.random() * 可能值的总数 + 第一个可能的值) str += Math.floor(Math.random() * 16).toString(16); } return str; } var result = getColor(); console.log(result);

1.4 字符串操作
JavaScript入门到放弃Day6——课后作业×7+面试经典题×3...量多单独整理成一篇。
文章图片

var str = 'abaasdffggghhijjkkgfddsssss3444343'; console.log(str.length); //求字符的长度 console.log(str[0]); //a console.log(str[3]); //a console.log(str[5]); //d console.log(str[9]); //g console.log(str.indexOf('a')); //a,输出最先找到的那个,找到马上停 console.log(str.indexOf('c')); //-1,没有这个元素则返回-1.false console.log(str.indexOf('b')); //b,输出最先找到的那个,找到马上停 console.log(str.replace('g', 22)); //g元素 console.log(str.replace('ss', 'b')); //第0个元素替换为m console.log(str.slice(1, 5)); //截取1-5的字符串

var o = {}; //创建空对象 for (var i = 0; i < str.length; i++) { var chars = str.charAt(i); //获取字符串的每一个元素(字符) if (o[chars]) { o[chars]++; } else { o[chars] = 1; } } console.log(o); var max = 0; var ch = ''; for (var k in o) { if (o[k] > max) { max = o[k]; ch = k; } } console.log(max); console.log('最多字符是' + ch);

1.4 字符串操作2
字符串:“abaasdffggghhjjkkgfddsssss3444343”,问题如下:
1、 字符串的长度
2、 取出指定位置的字符,如:0,3,5,9等
3、 查找指定字符是否在以上字符串中存在,如:i,c ,b等
4、 替换指定的字符,如:g替换为22,ss替换为b等操作方法
5、 截取指定开始位置到结束位置的字符串,如:取得1-5的字符串
6、 找出以上字符串中出现次数最多的字符和出现的次数
7、 遍历字符串,并将遍历出的字符两头添加符号“@”
var str = 'abaasdffggghhjjkkgfddsssss3444343'; //1 console.log(str.length); console.log(str[0]); //a console.log(str[3]); //a console.log(str[5]); //d console.log(str[9]); //gconsole.log(str.indexOf('i')); //-1 记得字符串加引号 console.log(str.indexOf('c')); //-1 console.log(str.indexOf('b')); //1console.log(str.replace('g', 22)); //替换操作 console.log(str.replace('ss', 'b')); //替换操作console.log(str.slice(1, 5)); //baas// 6.找出以上字符串中出现次数最多的字符和出现的次数 var o = {}; //创建一个新对象用来统计出现次数 for (var i = 0; i < str.length; i++) { var chars = str.charAt(i); //chars 是 字符串的每一个字符 if (o[chars]) { //如果返回-1,说明存在就+1 o[chars]++; } else { o[chars] = 1; } } console.log(o); //统计出现次数var max = 0; var str1 = ''; for (var k in o) { // k 得到是 属性名 // o[k] 得到的是属性值 if (o[k] > max) { //如果它的属性值 > 上一个的属性值 max = o[k]; //存放在max里,继续去比较下一个 str1 = k; } } console.log(max); console.log('出现最多的字母是:' + str1); // 7、 遍历字符串,并将遍历出的字符两头添加符号“@” for (var i = 0; i < str.length; i++) { // ch = "@" + str[i] + "@"; console.log('@' + str[i] + '@'); }

2 - 进阶作业 2.1 随机选学员
? 从以下学员名单中随机选出4个学员:
? var arr = [“鹿晗”,“王俊凯”,“蔡徐坤”,“彭于晏”,“周杰伦”,“刘德华”,“赵本山”];
? 注意:不要有重复的学员
var arr = ["鹿晗", "王俊凯", "蔡徐坤", "彭于晏", "周杰伦", "刘德华", "赵本山"]; var newArr = []; //创建空数组 while (newArr.length < 4) { // var num = Math.floor(Math.random() * 7); //这里随机生成0-7,这里数字是可以重复的,num意义是当作arr数组的索引值 if (newArr.indexOf(arr[num]) === -1) { //这里作用就是判断随机生成arr数组元素在newArr数组中是否存在,不存在则indexOf()值为-1,执行里面代码 newArr.push(arr[num]); //将该值push()方法‘推’到newArr数组中,因为indexOf()结果若不是-1则表示存在该元素,就不会执行这条代码,便实现了学员不重复 } }console.log(newArr);

2.2 随机排序
? 对以下学员随机排序,生成一个新数组:
? var arr = [“鹿晗”,“王俊凯”,“蔡徐坤”,“彭于晏”,“周杰伦”,“刘德华”,“赵本山”];
?
var arr1 = ["鹿晗", "王俊凯", "蔡徐坤", "彭于晏", "周杰伦", "刘德华", "赵本山"]; arr1.sort(); //方法1 console.log(arr1);

function shuffle(arr) { //方法2 var len = arr.length; for (var i = 0; i < len - 1; i++) { var index = parseInt(Math.random() * (len - i)); var temp = arr[index]; arr[index] = arr[len - i - 1]; arr[len - i - 1] = temp; } return arr; } var arr = ["鹿晗", "王俊凯", "蔡徐坤", "彭于晏", "周杰伦", "刘德华", "赵本山"]; console.log(shuffle(arr)); //结果不唯一

面试经典题型
1.判断一个字符串 ‘abcoefoxyozzopp’ 中出现次数最多的字符,并统计其次数。
//判断一个字符串 'abcoefoxyozzopp' 中出现次数最多的字符,并统计其次数。 // o.a = 1 // o.b = 1 // o.c = 1 // o.o = 4 // 核心算法:利用 charAt() 遍历这个字符串 // 把每个字符都存储给对象, 如果对象没有该属性,就为1,如果存在了就 +1 // 遍历对象,得到最大值和该字符 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); // 2. 遍历对象 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);

2.数据去重
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; }

基本包装类型(重要)
为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String、Number和 Boolean。
基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。
// 下面代码有什么问题? var str = 'andy'; console.log(str.length);

按道理基本数据类型是没有属性和方法的,而对象才有属性和方法,但上面代码却可以执行,这是因为js 会把基本数据类型包装为复杂数据类型。
其执行过程如下 :
// 1. 生成临时变量,把简单类型包装为复杂数据类型 var temp = new String('andy'); // 2. 赋值给我们声明的字符变量 str = temp; // 3. 销毁临时变量 temp = null;

分享结束。

    推荐阅读