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进制的随机颜色

​ 题目提示: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...量多单独整理成一篇。_第1张图片

        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]); //g

        console.log(str.indexOf('i')); //-1 记得字符串加引号
        console.log(str.indexOf('c')); //-1
        console.log(str.indexOf('b')); //1

        console.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;

分享结束。

你可能感兴趣的:(JavaScript学习)