JavaScript基礎編程題目練習

1.如何將浮點數點左邊的數每三位添加一個逗號,如12000000.11轉化爲『12,000,000.11』?

  function commafy(num){
  	return num && num
  		.toString()
  		.replace(/(\d)(?=(\d{3})+\.)/g, function($1, $2){
  			return $2 + ',';
  		});
  }

2.如何實現一個數組的隨機排序?

//方案一:
        function sortRandom1(arr) {
            let length = arr.length;
            for(let i = 0 ; i < length ; i++) {
                let rand = parseInt(Math.random()*length);
                let temp = arr[rand];
                arr[rand] = arr[i];
                arr[i] = temp;
                console.log(rand)
            }
            console.log(arr);
        }
        sortRandom1(arr);
//方案二:
      arr.sort(() => {
           return Math.random() - 0.5;
       })
        console.log(arr);
//方案三
        function sortRandom2(arr) {
            let midArray = [];
            while (arr.length > 0 ) {
                let randIndex = parseInt(Math.random() * arr.length);
                midArray.push(arr[randIndex]);
                arr.splice(randIndex,1);
            }
        }
        sortRandom2(arr);

3.產生四位隨機驗證碼

		function require() {
            let str = '0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM'
            let length = str.length;
            let requireStr = '';
            for(let i = 0 ; i < 4 ; i++) {
                requireStr += str[parseInt(Math.random() * length)];
            }
            return requireStr;
        }

        console.log(require())
    function require() {
        let str = '0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM'
        let length = str.length;
        let requireStr = '';
        for(let i = 0 ; i < 4 ; i++) {
            let random = parseInt(Math.random() * length);
            if(requireStr.indexOf(str[random]) !== -1) {
                continue;
            }
            requireStr += str[random];
        }
        return requireStr;
    }
    console.log(require())

4.給你一個字符串String=“adadfdfseffqdjhuserfefsefseetsdg”,要求找出裏邊的字符串qdjhu

        let str = "adadfdfseffqdjhuserfefsefseetsdg";
        let aimStr = "qdjhu";
        let start = str.indexOf(aimStr);
        console.log(start)
        let end = start + aimStr.length;
        console.log(end)
        let result = str.substr(start,aimStr.length)
        // let result = str.substring(start,end);
        console.log(result)

5.自定義函數實現字符串反轉

思路:利用split()方法轉化爲數組,利用數組的reverse()方法反轉數組,再利用join()方法轉爲字符串即可.

        let str = "abcdef";
        function reverse(str) {
            let arr = str.split('')
            let revArr = arr.reverse();
            let result = revArr.join('');
            return result;
        }
       console.log(reverse(str));

6.判斷字符串是不是迴文字符串

        function huiwen(str) {
            //先將字符串轉化爲數組
            let arr = str.split('')
            //利用數組反轉
            let revArr = arr.reverse();
            //翻轉後的數組轉化爲字符串
            let result = revArr.join('');
            if(result === str) {
                console.log(str + '是迴文字符串');
                
            }else{
                console.log(str + '不是迴文字符串');
            }
        }

7.javaScript中如何檢測一個數據是不是String類型?

		function isString(str) {
            if(typeof str == 'String' || str.constructor == String) {
                return true;
            }else{
                return false;
            }
        }

8.我們可以用2*1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?

在這裏插入圖片描述
類似於斐波拉契數列

 	function fun(n) {
            if(n === 1) {
                return 1;
            }
            if(n === 2) {
                return 2;
            }
            return fun(n-1) +fun(n-2)
        }

9.編寫請給 Array 本地對象增加一個原型方法,它用於刪除數字數組中重複的數字(可能有多個),返回值是一個包含被刪除的重複條目的新數組.

  Array.prototype.distinct = function(){
            let result = new Array;
            for(var i = 0 ; i < this.length ; i++) {
                for(var j = i+1; j < this.length;j++) {
                    if(this[i] == this[j]) {
                        result.push(this.splice(j,1));
                        j--;
                    }
                }
            }
            return result;
        }

10.找出對象不在原型鏈上的屬性

    var C = function () { this.foo = 'bar'; this.baz = 'bim'; };
        C.prototype.bop = 'bip';
        let obj = new C();
        function iterate(obj) {
            let arr = [];
            for (let key in obj) {
                if (obj.hasOwnProperty(key)) {
                    arr.push(`${key}:${obj[key]}`)
                }
            }
            return arr;
        }
        console.log(iterate(obj));

11.給定字符串 str,檢查其是否包含數字,包含返回 true,否則返回 false

        let str = 'qwqabd';
        function fun(str) {
            let length = str.length;
            for(let i =0 ; i < length ; i++) {
                if(Number(str[i])) {
                    return true;
                }
            }
            return false;
        }
        console.log(fun(str));

12.求 a 和 b 相乘的值,a 和 b 可能是小數,需要注意結果的精度問題?

輸入:3, 0.0001
輸出:0.0003

//最後計算的精度是兩數精度之和
        function multiply(a, b) {
            if (Math.floor(a) == a && Math.floor(b) == b) {
                return a * b
            } else {
                let stra = a.toString();
                let strb = b.toString();
                let len1 =stra.split('.').length > 1 ? stra.toString().split(".")[1].length:0;
                let len2 =strb.split('.').length > 1 ? strb.toString().split(".")[1].length:0;
                return (a*b).toFixed(len1+len2)
            }
        }

13 .移除數組 arr 中的所有值與 item 相等的元素。不要直接修改數組 arr,結果返回新的數組

//輸入 [1, 2, 3, 4, 2], 2
//輸出 [1, 3, 4]
        let arr = [1, 2, 3, 4, 2];
        function remove(arr, item) {
            let newArr = [];
            for (let i = 0; i < arr.length; i++) {
                if (arr[i] !== item) {
                   newArr.push(arr[i])
                }
            }
            return newArr;
        }
         console.log(remove(arr, 2));

14. 完成函數 createModule,調用之後滿足如下要求:

  1. 返回一個對象
  2. 對象的 greeting 屬性值等於 str1, name 屬性值等於 str2
  3. 對象存在一個 sayIt 方法,該方法返回的字符串爲 greeting屬性值 + ', ’ + name屬性值
//構造函數方式
 		function createModule(str1, str2) {
            function obj() {
                this.greeting = str1;
                this.name = str2;
                this.sayIt = function () {
                    return (`${this.greeting}+${this.name}`)
                }
            }
            return new obj();
        }
//工廠模式     
 		function createModule(str1, str2) {
            function createObj() {
                let obj = new Object;
                obj.greeting = str1;
                obj.name = str2;
                obj.sayIt = function () {
                    return (`${obj.greeting}+${obj.name}`)
                }
                return obj;
            }
            return createObj();
        }
//組合模式
        function createModule(str1, str2) {
            function obj() {
                this.greeting = str1;
                this.name = str2;
           }
           obj.prototype.sayIt = function() {
                return (`${this.greeting},${this.name}`)
           }
            return new obj();
        }

15.將給定數字轉換成二進制字符串。如果字符串長度不足 8 位,則在前面補 0 到滿8位。

在多數情況下,調用toString()方法不必傳遞參數.但是,在調用數值的 toString() 方法,可以傳遞一個參數,輸出數值的基數.默認情況下, toSting()方法以十進制格式返回數值的字符串表示.二通過傳遞基數,toString() 可以輸出二進制,八進制,十六進制,乃至其他任意有效進制格式表示的字符串

       var num = 10;
       alert(num.toString());          //"10"
       alert(num.toString(2));         //"1010"
       alert(num.toString(8));         //"12"
       alert(num.toString(10));        //"10"
       alert(num.toString(16));        //"a"
   		function convertToBinary(num) {
            let str = parseInt(num).toString(2);    
            let arr = str.split('');
            while(arr.length < 8) {
                arr.unshift(0);
            }
            return arr.join('')
            // console.log(arr.join(''));
            
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章