JS笔试题——编程题 (数组去重、去空格、找冲重复、深拷贝、防抖节流、素数、平年闰年、new、promise)

目录

1、将 "hqyj-is-good" 字符串  转为:  "hqyjIsGood"

2、找出数组中最大的元素

3、随便传入一个字符串 找出重复的次数,并返回下标

4、去掉头尾和全部的空格

5、

6、第一个字母变大写

7、设计myforEach

8、设计mysome

9、判断自循环重复次数或者是否存在 (是否存在:indexOf和match两种方法)

10、编写一段程序代码,获取今天的日期,格式如“2021-01-01”;并计算下一周同一天的日期。

11、修改以下代码,使其按照意图输出0,1,2,3,4

12、下面代码输出的内容是

13、使用es6 合并两个对象

14、 下面输出内容是

15、获取input框中的value值

16、封装一个方法,实现原生JS兼容各类浏览器的元素事件绑定?

17、数组去重--11种方法

18、深拷贝

19、防抖节流

20、判断素数 + `求1到100以内素数`

21、判断是否平年闰年

22、找出字符串中指定字母下标 , 次数

23、实现new关键字

24.实现promise关键字

25、输入一行字符串,由英文字母、数字、和空格组成,并以换行符结尾,其中大写字母、小写字母、数字和空格出现的次数、并依次输出

26、给定N个整数,请你依次输出第一大的数与第一小的数之和,第二大的数与第二小的数之和,第三大的数与第三小的数之和(如果N为奇数,中位数不必输出)


1、将 "hqyj-is-good" 字符串  转为:  "hqyjIsGood"

    //方法一:
        var str = "hqyj-is-good"
        var arr = str.split("-")
        re = arr[0] + arr[1][0].toUpperCase() + arr[1][1] + arr[2][0].toUpperCase() + arr[2][1] + arr[2][2] + arr[2][3]
        console.log(re)

        //方法二
        var str = "hqyj-is-good"
        String.prototype.myparse = function (str) {
            var arrStr = str.split('-')
            for (var i = 1; i < arrStr.length; i++) {
                arrStr[i] = arrStr[i].substr(0, 1).toUpperCase() + arrStr[i].substr(1)
            }
            return arrStr.join("")
        }
        var str2 = str.myparse(str)
        console.log(str2)

        //方法三:
        String.prototype.myparse = function (str) {
            var arr = this.split("-")
            var arr2 = arr[1].split("")
            var re = arr2[0].toUpperCase()
            for (var i = 1; i < arr2.length; i++) {
                re += arr2[i]
            }
            var arr3 = arr[2].split("")
            var rel = arr3[0].toUpperCase()
            for (var j = 1; j < arr3.length; j++) {
                rel += arr3[j]
            }
            var arr4 = arr[0].concat(re, rel)
            return arr4
        }
        var str = "hqyj-is-good"
        var str2 = str.myparse()
        console.log(str2)

        //方法四:
        var str = "hqyj-is-good"

        function myparse(str) {
            var arrStr = str.split('-')
            for (var i = 1; i < arrStr.length; i++) {
                arrStr[i] = arrStr[i].substr(0, 1).toUpperCase() + arrStr[i].substr(1)
            }
            return arrStr.join("")
        }
        console.log(myparse(str))

2、找出数组中最大的元素

 //方法一:
        var arr = [10, 4, 2, 5, 30, 1]
        var maxnum = Math.max.apply(0, arr)
        console.log(maxnum)

        //方法二:js中的sort()方法
        var arr = [10, 4, 2, 5, 30, 1]
        var re = arr.sort(function (a, b) {
            return b - a
        })
        console.log(re[0])

        //方法三:
        Array.prototype.mymax = function () {
            this.sort(function (a, b) {
                return b - a
            })
            return this[0]
        }
        var arr = [10, 2, 3, 5, 30, 1]
        var re = arr.mymax()
        console.log(re)

        //方法四
        var arr = [10, 4, 2, 5, 30, 1]
        var max3 = -Infinity;
        for (var i = 0; i < arr.length; i++) {
            if (max3 < arr[i]) {
                max3 = arr[i];
            }
        }
        console.log(max3)

        //方法五:
        Array.prototype.mymax = function(arr) {
            for (var i=0;i<this.length;i++) {
                var a=this[i]
                var b = this[i+1]
                var arr2=this.sort(function(a,b) {
                    var rel = b-a
                    return rel
                })
            }
            return arr2[0]
        }
        var arr=[10,2,3,5,30,1]
        var re=arr.mymax()
        console.log(re)

        //方法六
        var arr=[1,2,3]
        var arrMax=Math.max(...arr)
        console.log(arrMax)

//方法七: 选择排序`
var arr = [123,203,23,13,34,65,65,45,89,13,1];
for(var i=0;i<arr.length;i++){
	for(var j=i+1;j<arr.length;j++){
		//如果第一个比第二个大,就交换他们两个位置
		if(arr[i]>arr[j]){
			var temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
	}
}
console.log(arr); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]

//方法八: 冒泡排序`
var arr = [123,203,23,13,34,65,65,45,89,13,1];
for(var i=0; i<arr.length-1; i++){
	//每一轮比较要比多少次
	for(var j=0; j<arr.length-1-i; j++){
	    //如果第一个比第二个大,就交换他们两个位置
	    if(arr[j]>arr[j+1]){
	        var temp = arr[j];
	        arr[j] = arr[j+1];
	        arr[j+1] = temp;
	    }
	}    
}
console.log(arr); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]

//方法九: 插入排序`
var arr = [123,203,23,13,34,65,65,45,89,13,1];
var preIndex, current;
for(var i=1;i<arr.length;i++){
	preIndex = i-1;
	current = arr[i];
	while(preIndex>=0 && arr[preIndex]>current) {
	    arr[preIndex+1] = arr[preIndex];
	    preIndex--;
	}
	arr[preIndex+1] = current;
}
console.log(arr); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]

//方法十: 快速排序`
var arr = [123,203,23,13,34,65,65,45,89,13,1];	
//创建快速排序函数
function quickSort(tempArr){
	//递归终止条件
	if(tempArr.length<=1){
		return tempArr;
	};
	//取基准
	var pivotIndex = Math.floor(tempArr.length/2);
	var pivot = tempArr.splice(pivotIndex,1);
	//分左右
	var leftArr = [];
	var rightArr = [];
	for(var i=0;i<tempArr.length;i++){
		if(tempArr[i]>pivot){
			rightArr.push(tempArr[i]);
		}else{
			leftArr.push(tempArr[i]);
	    };
	};
	return quickSort(leftArr).concat(pivot,quickSort(rightArr));
};
console.log(quickSort(arr)); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]

3、随便传入一个字符串 找出重复的次数,并返回下标

        //方法一
        String.prototype.count1 = function (str) {     //方法一
            var re = -1;
            var count = 0
            var arr = []
            do {
                re = this.indexOf(str, re + 1)
                if (re != -1) {
                    count++, arr.push(re)
                }
            } while (re != -1)
            return (count, arr)
        }
        var str = "abcdqwaeab"
        var re = str.count1("ab")
        console.log(re) 

        //方法二
        var str = 'abcabca';
        var arr = [];
        var n = 0;
        while (str.indexOf('ab', n) != -1 && n < str.length) {
            arr.push(str.indexOf('ab', n));
            n = str.indexOf('ab', n) + 2;
        }
        var repeatCount = arr.length
        var repeatIndex = arr
        console.log(repeatCount, repeatIndex);

        //方法三
        String.prototype.repeatCount = function (a) { 
            var count = 0
            var index = this.indexOf(a)
            while (index != -1) {
                index = this.indexOf(a, index + 1)
                count++
            }
            return count
        }
        var str = "abcdqwaeab"
        var re = str.repeatCount("ab")
        console.log(re)

4、去掉头尾和全部的空格


        //方法一:去除两端空格
        var str = "    he   llo ";
        console.log(str.trim()); //hello

        //方法二:去除所有空格   !!!!
        console.log(str.replace(/\s*/g, "")); //hello

        //方法三:去除两端空格
        String.prototype.mytrim = function () {
            var a = /\s+/
            var str = this.replace(a, "")
            var b = /\s+$/
            var str = str.replace(b, "")
            return str
        }
        var str = "  hello  "
        var re = str.mytrim()
        console.log(re)


        //方法四:去除两端空格
        String.prototype.mytrim = function (str) {
            var arr = this.split(" ")
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] != "") {
                    return arr[i]
                }
            }
        }
        var str = "   hel   lo  "
        var re = str.mytrim()
        console.log(re)


        //`方法五:(强烈推荐)全部去除`
        var str = '  abc d e f  g ';
        function trimAll(ele) {
            if (typeof ele === 'string') {
                return ele.split(' ').join('');
            } else {
                console.error(`${typeof ele} is not the expected type, but the string type is expected`)
            }
        }
        console.log(trimAll(str))//abcdefg

        //方法六:指定位置清楚空格(第二个参数控制位置)`
        function deleSpac(str, direction) { // 1 串的模板 2 清除哪边空格
            if (typeof str !== 'string') { // 限制下条件,必须是字符串
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值