js基礎知識應用(2)

js基礎知識應用

JS簡單小記事本

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            margin:0;
            padding:0;
        }
        ul{
            list-style: none;
            border: 1px solid black;
            height: 200px;
            font-size: 20px;
            overflow: hidden;
        }
        li {
            line-height: 30px;
        }
        #box {
            width: 500px;
            height: 50px;
            margin: 0 auto;  
        }
        #text {
            margin-left: 100px;
            height: 30px;
            width: 280px;
        }
        #btn {
            height: 30px;
            width: 40px;
            
        }
    </style>
</head>
<body>
        <div id="box">
            <ul id="list">
                <li></li>
            </ul>
            <input type="text" id="text" value=""><button id="btn">輸入</button>
        </div>
        <script>    
            let list = document.getElementById('list');
            let text = document.getElementById('text');
            let btn = document.getElementById('btn');
            console.log(list,text,btn)
            btn.onclick = function(){
                let value = text.value;
                //獲取input裏的value屬性
                let note = list.innerHTML;
                //識別ul裏邊的標籤  
                list.innerHTML = note + '<li>'+ value + '</li>';
                //ul裏的新內容等於它的舊內容加新標籤裏的新內容,提交不會覆蓋已經提交的內容
                text.value = '';
                //設置文本框提交後,清空文本框
            }
        
        </script>
</body>
</html>

JS簡單一個驗證碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
      *{
        margin:0;
        padding:0;
    }
    #box{
        width: 500px;
        margin: 200px auto;
        text-align: center;
    }
    </style>
</head>
<body>
    <div id = "box">
        <span id = "show">請點擊開始</span>
        <button id = "btn">開始</button>
    </div>
    <script>
        let show = document.getElementById('show');
        let btn = document.getElementById('btn');
        let aa = null;
        //創建一個變量,用來存儲定時器的返回值
        btn.onclick = function(){
            let value = btn.innerText;
            //獲取按鈕內容,如果成立定時器開始    反之停止
            if(value === '開始'){
                aa = setInterval(name,100);
                btn.innerText = '停止';
            }
            else{
                clearInterval(aa);
                btn.innerText = '開始'
            }
        }
        function name(){
            let ary = ['AAA', 'BBB', 'CCC', 'DDD', 'EEE','FFF', 'GGG', 'HHH', 'JJJ', 'KKK', 'LLL', 'ZZZ','XXX', 'CCC', 'VVV', 'BBB', 'NNN', 'MMM', 'QQQ', 'EEE', 'WWW ', 'RRR', 'TTT', 'YYY', 'III', 'OOO', 'PPP', 'MMM', 'UIO', 'BNH', 'GYH', 'LKI'];
            let index = Math.round(Math.random()*(ary.length-1-0)+0);
               //隨機獲取數組的一個索引
               let name1 = ary[index];
               //通過索引獲取數組一個名字
               show.innerText = name1;

        }
    
    </script>
</body>
</html>

倒計時

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        #box {
            /* width: 1000px; */
            height: 300px;
            background: -webkit-linear-gradient(top right, red, green, orange);
            line-height: 300px;
            text-align: center;
            font-size: 100px;
            font-weight: 700;
            margin: 200px auto;
            -webkit-background-clip: text;
            color: transparent;
            font-family: '等線';
        }
    </style>
</head>

<body>
    <div id="box">

    </div>
    <script>
        // 1.首先得有終止的時間
        // 2.把現在的時間和終止的時間差轉換爲小時 分鐘 秒
        let box = document.getElementById('box')
        let endTime = new Date('2019-12-23 19:44');

        let num = null;

        // 不足十位補0方法
        let addZero = val => val < 10 ? '0' + val : val;

        // 頁面初次渲染時,爲了防止頁面閃,執行一次setTime方法
        setTime()

        function setTime() {
            let time = new Date();// 創建變量獲取現在的時間
            let dirrTime = endTime - time;// 獲得現在時間和結束時間的時間差(單位是毫秒)

            // 如果時間差爲0,那就證明倒計時該結束了
            if (dirrTime <= 0) {
                clearInterval(num);// 清空定時器
                box.innerText = "xxx";// 把div的內容修改
                box.style.background = "red";
                box.style.webkitBackgroundClip = "text";
                console.log(box.style)
                return
            }

            let hour = Math.floor(dirrTime/3600000);//獲取小時
            let min = Math.floor((dirrTime - hour*3600000)/60000);//獲得分
            let sec = Math.floor((dirrTime - hour*3600000 - min*60000)/1000);//獲得秒
            let value = addZero(hour) + '時' + addZero(min) +'分'+ addZero(sec) +'秒'
            box.innerText = value;
        }

        num = setInterval(setTime, 1000);

    </script>
</body>

</html>

排序的三種方式

1.冒泡排序

// 冒泡排序
// 原理:數組的每一項進行兩兩比較,如果前一項大於後一項,就交換位置。
// 每比較一輪,就會產生一個最大值,放到最後,    so  冒泡排序   比較'ary.length-1'輪  每輪比較'ary.length-1-
已經執行過的輪數'
// let ary = [12,23,11,34,10,9];
/* 
第一輪比較(比較了5次-已經執行過的輪數)
12,23  [12,23,11,34,10,9]
23,11  [12,11,23,34,10,9]
23,34  [12,11,23,34,10,9]
34,10  [12,11,23,10,34,9]
34,9   [12,11,23,10,9,34]
第二輪(比較4次  ary.length-1-已經執行過的輪數)
12,11  [11,12,23,10,9,34]
12,23  [11,12,23,10,9,34]
23,10  [11,12,10,23,9,34]
23,9   [11,12,10,9,23,34]
第三輪(比較3次)
 */
// 每比較一輪就會產生一個最大值,當前數組一共六個值,比較五輪就會產生5個最大值,剩下的那個肯定是最小的
(ary.length-1// 每輪比較的次數
// let temp = null;
// let a = 12;
// let b = 13;
// temp = a; // 12
// a = b // 13
// b = temp  // 12
let ary = [12,23,11,34,10,9];
function buble(ary){
    // 控制的比較的輪數
    for (var i = 0; i < ary.length-1; i++) {
        // 控制的是每一輪比較的次數
        for (var j = 0; j < ary.length-1-i; j++) {
            // 如果前一項大於後一項就兩兩交換位置
           if(ary[j]>ary[j+1]){
               let temp = ary[j];
               ary[j] = ary[j+1];
               ary[j+1] = temp;
           }
        }
    }
    return ary
}
console.log(buble(ary))

2.插入排序

// 插入排序的原理:猶如抓牌,碼牌
// 抓取一張牌,和手中的牌從右往左依次比較,
// 如果發現該牌比手中的牌大,就插入到這張牌的後邊,結束比較
// 如果發現該牌比手中所有的牌都小,就放到排的最前邊,結束比較
let ary = [12, 23, 45, 11, 10, 23];
function insert(ary) {
    let handAry = []; // 用來存放手裏的牌
    handAry.push(ary[0]); // 抓了第一張牌
    // 這個循環就是抓牌
    for (var i = 1; i < ary.length; i++) {
        let item = ary[i] // 抓的每一張牌
        // 控制的是跟我手裏的每一張牌去做比較(從右往左比較)
        for (var j = handAry.length - 1; j >= 0; j--) {
            let cur = handAry[j] // 手裏的每一張牌
            // 如果抓的牌比手裏的牌大了,就插入到這張牌的後面,並且停止比較
            if (item > cur) {
                handAry.splice(j + 1, 0, item);
                break;
            }
            // 如果能運行到這,證明抓的這張牌比我手裏的牌都小,就直接放到數組的最前面
            if (j === 0) {
                handAry.unshift(item);
            }
        }
    }
    return handAry
}
console.log(insert(ary)

3.快速排序

let ary = [3, 4, 2, 1];
       function quick(ary) {
           // 4、如果數組中的length小於等於1,那就結束遞歸,把原數組return出去
           if (ary.length <= 1) {
               return ary
           }
           // 1、獲取中間的一項作爲基準(並且把原數組中的那一項刪除)
           let middleIndex = Math.floor(ary.length / 2) // 拿到中間項的索引
           let middleValue = ary.splice(middleIndex, 1)[0];
           // 2、創建兩個數組,循環數組的每一項和基準做比較,如果每一項小於基準,就放到左邊數組,反之放右邊
           let leftAry = [];
           let rightAry = [];
           for (var i = 0; i < ary.length; i++) {
               if (ary[i] < middleValue) {
                   leftAry.push(ary[i])
               } else {
                   rightAry.push(ary[i])
               }
           }
           // 3、不斷重複1和2步驟(遞歸)
           return quick(leftAry).concat(middleValue, quick(rightAry))
       }
       console.log(quick(ary))
       // return  [1].concat(2, [3,4])
       //       return  [1]             return  [3].concat(4, [])
       //                                      return  [3]            return  []

去重的三種方式

去重一`

		創建一個空數組,循環原數組的每一項,檢測每一項在空數組中是否存在,不存在,就存入到空數組中,存在就開始下一個
let ary = [12,23,34,12,23];
function fn(n) {
    let newAry = []//創建一個新數組
  for (var i = 0;i<ary.length;i++){
    let item = ary[i]//代表數組每一項
    
    //檢測新數組中是否包含某一項,如果包含了,就不讓條件成立
    if(!newAry.includes(item)){
        newAry.push(item);
    }
  }
  reyurn newAry
}
console.log(fn(ary))

去重二

		循環數組每一項,拿當前項和後面的數依次作比較,如果後面的數和當前項相等,那就在原數組裏刪除與之相等的數
let ary = [1,2,3,1,2,3,1,2,3];
let fn =function (ary){
   // 循環數組每一項
  
   // 外面大循環每循環一次,這個小循環就會從頭到尾循環一遍
    for (var i=0;i<ary.length;i++){
    let item = ary[i];// 數組的每一項 
    for (var j=i+1;j<ary.length;j++){
        let cur = ary[j]// 當前項後面的每一項
      
      // 如果當前項和後面的某一項相等了,條件成立
      if(item===cur){
            ary.splice(j,1);// 從原數組中刪除重複的那一項
            j--               //此處爲解決數組刪除塌陷問題,每刪除一項時,j--,防止跳過一項
                                             // 從數組中刪除一項,後面的每一項的索引都得往前挪一位(數組塌陷)
         }
    }
  }
}
fn(ary)
console.log(ary)
/* 
i=0   item = 1
  j=1   2
  j=2   3
  j=3   1
  j=4   2
i=1   item = 2
  j=2   3
  j=3   1
  j=4   2
i=2   item = 3
  j=3   1
  j=4   2
*/

去重三

	利用屬性名獲取屬性值獲取不到爲undefined的特點
	循環數組的每一項,把數組的每一項放到對象裏(讓鍵值對的key和value都等於那一項)
let ary = [1,1,2,3,1,2,3];
function fn(ary){      
    let newObj = {};                            // 創建一個新對象用來存儲鍵值對
  // 循環數組的每一項
  for(var i = 0; i < ary.length; i++){
    
    // 檢測一下當前項在對象裏有沒有,如果有,那以下條件就成立
    // 也就是說以前就存儲過這一項(證明已經是重複項)
    if(newObj[ary[i]] !== undefined){
        ary.splice(i,1)         // 刪除重複項
      i--                               // 防止數組塌陷
    }else{
      // 如果對象中沒有這個屬性名對應的屬性值,那就新增這個鍵值對
        newObj[ary[i]] = ary[i]
    }
  }
}
fn(ary)
console.log(ary)
let ary = [1,1,2,3,1,2,3];
function fn(ary){      
  let newObj = {};              // 創建一個新對象用來存儲鍵值對
  // 循環數組的每一項
  for(var i = 0; i < ary.length; i++){
    
    // 檢測一下當前項在對象裏有沒有,如果有,那以下條件就成立
    // 也就是說以前就存儲過這一項(證明已經是重複項)
    if(newObj[ary[i]] !== undefined){
      ary[i] = ary[ary.length-1];//用數組最後一項替換重複的那一項
      ary.length--;//刪除數組最後一項
      i--;//防止數組塌陷
    }else{
      // 如果對象中沒有這個屬性名對應的屬性值,那就新增這個鍵值對
      newObj[ary[i]] = ary[i]
    }
  }
}
fn(ary)
console.log(ary)`
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章