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)`
发布了17 篇原创文章 · 获赞 23 · 访问量 376

猜你喜欢

转载自blog.csdn.net/wang_js_amateyr/article/details/103298177