JavaScript_Day_09 (对象、商品搜索)

数组的基本方法:

shift()   pop()    push()    unshift()   直接改变原数组;

数组的常用方法:

splice(i , howmany , v1 , v3 ...)  删除,替换,新增;

includes()   indexOf()

join()  转换字符串

concat()  拼接数组,得到新的数组

数组的迭代方法:

          sort()

          forEach()  遍历数组   不能写返回值

          map()   改变数组中的值

          filter()  过滤数据,找到满足条件的值,返回新的数组

          every() 是否每条数据都满足条件

          some()  是否有数据满足条件

 数据类型:

           数字 ,字符串,布尔值

           数组

           函数(代码块)

        var obj = 

        function get() {  
            document.getElementById('id') ;
        }


        // function buyCar(car) {  
        //     console.log('买一个' + car);
        // }

        // function buyCar(car) {  
        //     car()
        // }

        // buyCar(function () {  
        //     console.log(666);
        // })



        function idDate(cb) {  
            // ...
            // ...
            // ...
            // ...

            // alert(666);
            cb()
        }



        // isDate(function () {  
        //     alert('我真厉害,居然写出来了')
        // })

        // isDate(function () {  
        //     alert('真简单')
        // })

        // isDate(function () {  

        // })


        function forEach(arr , cb) {
            for(var i = 0 ; i < arr.length ; i++) {
                cb(arr[i])
            }
        }



        var sum = 0 ;
        forEach([1,2,3] , function (v) {  
            sum += v ;
        })

在排序好的数组中插入一个值:

    <script>

        // var arr = [1,3,6,8,9,12] ;
        // var n = 0 ;

        // // 比前一个数大,比后一个数小
        // for(var i = 0 ; i < arr.length - 1 ; i++) {
        //     if(n >= arr[i] && n <= arr[i+1] ) {
        //         arr.splice(i+1 , 0 , n)
        //         // 在插入值以后,数组会变长,后面就把插入的值加入判断,条件也会满足
        //         break
        //     }
        // }
        // if(n < arr[0]) {
        //     arr.splice(0 , 0 , n);
        // }
        // if(n > arr[arr.length - 1]) {
        //     arr.push(n)
        // }
        // console.log(arr);




        // function insert(arr , n) {  
        //     // 插入就是找到 一个位置 
        //     //   1 最前面
        //     //   2 最后面
        //     //   3 在中间
        //     if(n < arr[0]) {
        //         arr.unshift(n);
        //     }else if(n > arr[arr.length - 1]) {
        //         arr.push(n)
        //     } else {
        //         for(var i = 0 ; i < arr.length - 1 ; i++) {
        //             if(n >= arr[i] && n <= arr[i+1]) {
        //                 arr.splice(i+1 , 0 ,n);
        //                 break ;
        //             }
        //         }
        //     }

        //     console.log(arr);

        // }



        function insert(arr , n) {  
            // 找位置
            var index = 0 ;   // 最前面
            // 最后面
            if(n > arr[arr.length - 1]) {
                index = arr.length ;
            } else {
                for(var i = 0 ; i < arr.length - 1 ; i++) {
                    if(n >= arr[i] && n <= arr[i + 1]) {
                        index = i + 1 ;
                    }
                }
            }


            arr.splice(index , 0 , n) ;
            console.log(arr);

        }

        insert([1,3,6,8,9,12] , 9)

    </script>

数据类型:

1.基本数据类型存储在栈内存中,变量存储的就是值;

2.引用数据类型存储在堆内存中,变量存储的是地址;

    <script>

        var a = 2 ;

        var b = a ;

        b++ ;

        console.log(a);


        var arr = [1,2,3] ;

        var arr2 = arr ;

        arr2.push(4) ;

        console.log(arr);   // arr发生了改变

    </script>
    

数组的深复制和浅复制:

数组的浅复制:只复制了地址 (共享地址);

数组的深复制:复制值;

        遍历(把原数组中的值存入新的数组)  var arr2 = [] ;

        slice()  截取数组中的所有值,得到的是一个新数组;

    <script>

        var arr = [1,2,3,4,5] ;

        // 数组的浅复制 --- 只是复制了地址
        // 
        var arr2 = arr ;

        // 数组的深复制  --- 复制数组中的值

        // 开了一房  609
        // var arr3 = [] ;
        // arr.forEach(function (v) {  
        //     arr3.push(v)
        // })
        // console.log(arr3);

        // arr3.push('a') ;

        // console.log(arr , arr3);


        var arr3 = arr.slice() ;
        console.log(arr3);

        arr3.push('a') ;

        console.log(arr);




        var arr4 = [1,2,3] ;
        var arr5 = ['a' , 'b'] ;
        arr4 = arr5 ;
        console.log(arr4);
        arr5.push('c') ;
        console.log(arr4);
        arr4.push(1) ;
        console.log(arr5);

        

    </script>

函数的值的值传递和引用传递:

函数传参时

基本数据类型传递是值;

引用数据类型传递的是地址(形参和实参共享地址);

因此在封装函数的时候:

  如果想改变原数组,就直接操作形参;

  如果不想改变原数组,就实现深复制,然后操作新的数组;

    <script>

        var a = 1 ;

        function fn(n) {
            // n = a ;  
            n++ ;
        }

        fn(a) ;  // 普通数据类型只是传递了值过去
        console.log(a);


        var arr = [1,2,3] ;

        function fn2(arr2) {  
            // arr2 = arr 
            arr2.push('a')
        }

        fn2(arr) ;
        console.log(arr);


        function bubbleSort(arr) {  
            // arr = arr3 ;
            // 不改变原数组,也就是不改变arr
            var arr7 = arr.slice() ;
            for(var i = 0 ; i < arr7.length - 1 ; i++) {
                for(var j = 0 ; j < arr7.length - 1 - i ; j++) {
                    if(arr7[j] > arr7[j+1]) {
                        var t = arr7[j];
                        arr7[j] = arr7[j+1]
                        arr7[j+1] = t
                    }
                }
            }
            console.log(arr7);
            return arr7
        }

        var arr3 = [6,7,4,2,9,1] ;
        var res = bubbleSort(arr3) ;
        console.log(arr3);


        function pop(arr) {  
            // arr = arr3 ; // 608
            var newArr = [] ;  // 609
            for(var i = 0 ; i < arr.length - 1 ; i++) {
                newArr.push(arr[i])
            } 
            // arr = newArr ;  // arr 609
            return newArr
        }
        var arr3 = [6,7,4,2,9,1] ;  // 608
        var res = pop(arr3) ;
        console.log(res);
        console.log(arr3);
        arr3 = res ;


        var arr = [1,2,3] ;  // 608
        arr = [6,7,9] ;  // 609


    </script>

二维数组:

  <script>

        var arr = [
            [1,2,3],
            [4,5,6],
            [2,3,4]
        ]

        // console.log(arr);

        // console.log(arr[0][1]);

        for(var i in arr) {
            for(var j in arr[i]) {
                console.log(arr[i][j]);
            }
        }


        function concat() {  
            console.log(arguments);
            var newArr = [] ;
            for(var i in arguments) {
                for(var j in arguments[i]) {
                    console.log(arguments[i][j]);
                    newArr.push(arguments[i][j])
                }
            }
            console.log(newArr);
        }

        concat([1,2,3] , [4,5,6])


        var arr = [1,2,3,[4,5],[6,7,8]] ;
        var arr2 = arr.slice() ;
        // arr2.push('a') ;
        // console.log(arr2);
        // console.log(arr);

        arr2[3].push('a') ;
        console.log(arr2);

        console.log(arr);

    </script>
    
</body>

生成表格:

<body>

    <table>
        <thead>
            <tr>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>地址</th>
            </tr>
        </thead>
        <tbody id="tb">

        </tbody>
    </table>

    <script>
        var arr = [
            ['方总' , '男' , '32' , '青年公寓'],
            ['师爷' , '男' , '42' , '青年公寓'],
            ['班长' , '男' , '18' , '江滩边上'],
            ['方总' , '男' , '32' , '青年公寓'],
            ['方总' , '男' , '32' , '青年公寓'],
            ['师爷' , '男' , '42' , '青年公寓'],
            ['班长' , '男' , '18' , '江滩边上'],
            ['方总' , '男' , '32' , '青年公寓'],
        ]

        var res = '' ;
        for(var i in arr) {
            res += '<tr>'
            for(var j in arr[i]) {
                res += '<td>' + arr[i][j] + '</td>'
            }
            res += '</tr>'
        }
        console.log(res);

        var oTb = document.getElementById('tb') ;
        // 给输入框加内容 value
        // 给标签加内容   innerHTML
        oTb.innerHTML = res ;




    </script>
    
</body>

动态生成标签:

   <style>
        p{
            display: flex;
        }
        span{
            width: 80px;
            text-align: center;
            line-height: 40px;
            border: 1px solid #000;
            margin: 10px;
        }
    </style>
</head>
<body>

    <div id="box">

    </div>

    <script>

        var res = '' ;
        for(var i = 1 ; i <= 9 ; i++) {
            res += '<p>'
            for(var j = 1 ; j <= i ; j++) {
                res += '<span>' + j + '*' + i + '=' + i * j + '</span>' 
            }
            res += '</p>'
        }
        console.log(res);

        var oBox = document.getElementById('box') ;
        oBox.innerHTML = res ;

    </script>

动态生成列表:

    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        ul li{
            display: flex;
            width: 700px;
            margin: auto;
        }
        li span{
            /* flex-grow:1; */
            flex:1;
            text-align: center;
            line-height: 30px;
            border: 1px solid #000;
        }

    </style>
</head>
<body>

    <ul>
        <li>
            <span>序号</span>
            <span>姓名</span>
            <span>性别</span>
            <span>年龄</span>
            <span>地址</span>
        </li>
    </ul>
    <ul id="ul">
        
    </ul>

    <script>
        var arr = [
            ['方总' , '男' , '32' , '青年公寓'],
            ['师爷' , '男' , '42' , '青年公寓'],
            ['班长' , '男' , '18' , '江滩边上'],
            ['方总' , '男' , '32' , '青年公寓'],
            ['方总' , '男' , '32' , '青年公寓'],
            ['师爷' , '男' , '42' , '青年公寓'],
            ['班长' , '男' , '18' , '江滩边上'],
            ['方总' , '男' , '32' , '青年公寓'],
        ]

        var res = '' ;
        for(var i = 0; i < arr.length ; i++) {
            res += '<li>'
            res += '<span>' + (i + 1) + '</span>'
            for(var j = 0 ; j < arr[i].length ; j++) {
                res += '<span>' + arr[i][j] + '</span>'
            }
            res += '</li>'
        }
        console.log(res);

        var oUl = document.getElementById('ul');
        oUl.innerHTML = res ;

    </script>

对象

数组:存储同一种类型的数据,有序性;

对象:描述同一类型的事物(属性,方法)无序性;

        属性:属性值

        方法:函数

对象的两种访问方式 :

        person['name']   person['age']

        点语法  person.name   person.age

对象的遍历

  <script>
        var dog = {
            name : '二哈',
            age : 3 ,
            sex : '公',
            say : function () {  
                console.log('汪');
            }
        }

        // console.log(dog.name);
        // console.log(dog['name']);  


        for(var key in dog) {
            // console.log(key);
            console.log(dog[key]);
        }


        // arr.forEach()


        // var arr = {
        //     length : ,
        //     forEach : function () {  }
        // }
        // arr.forEach()


        // document 对象
        // console 对象
        // arr.join()


        var obj = {} 

        // 实例化对象  -- 空对象
        var obj = new Object() ;
        // 赋值
        obj.name = '奔驰' ;
        obj.color = 'pink' ;
        obj.price = '100w' ;


    </script>

对象的深拷贝和浅拷贝

    <script>

        var person1 = {
            name : '方总',
            age : 18
        }


        // 浅复制
        // var person2 = person1 ;

        // person2.name = '师爷' ;
        // console.log(person1);

        // var person2 = {}
        var person2 = new Object() ;
        for(var key in person1) {
            person2[key] = person1[key]
        }
        console.log(person2);

        person2.age = 20 ;

        console.log(person1);

    </script>
    

动态生成列表

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        ul li{
            display: flex;
            width: 700px;
            margin: auto;
        }
        li span{
            /* flex-grow:1; */
            flex:1;
            text-align: center;
            line-height: 30px;
            border: 1px solid #000;
        }

    </style>
</head>
<body>

    <ul>
        <li>
            <span>序号</span>
            <span>姓名</span>
            <span>性别</span>
            <span>年龄</span>
            <span>地址</span>
        </li>
    </ul>
    <ul id="ul">
        
    </ul>

    <script>
        var arr = [
            {
                name : '方总' ,
                age : 20 ,
                sex : '男',
                address : '青年公寓'
            },
            {
                name : '方总' ,
                age : 20 ,
                sex : '男',
                address : '青年公寓'
            },
            {
                name : '方总' ,
                age : 20 ,
                sex : '男',
                address : '青年公寓'
            },
            {
                name : '方总' ,
                age : 20 ,
                sex : '男',
                address : '青年公寓'
            },
            {
                name : '方总' ,
                age : 20 ,
                sex : '男',
                address : '青年公寓'
            }
        ]


        var res = '' ;
        // arr.forEach(function (v , i) {  
        //     res += '<li>'
        //     // 遍历对象
        //     for(var key in v) {

        //     }
        //     res += '</li>'
        // })

        for(var i = 0 ; i < arr.length ; i++) {
            res += '<li>'
            res += '<span>' + (i + 1) + '</span>'
            // 遍历对象
            for(var key in arr[i]) {
                res += '<span>' + arr[i][key] + '</span>'
            }
            res += '</li>'
        }
        var oUl = document.getElementById('ul');
        oUl.innerHTML = res ;

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

生成商品列表

    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        ul{
            width: 1200px;
            margin: auto;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-evenly;
        }
        li{
            width: 23%;
            border: 1px solid #000;
            text-align: center;
            line-height: 2;
            margin: 10px;
        }
        li img{
            width: 90%;
        }
        li span{
            color: red;
        }
    </style>
</head>
<body>

    <ul id="list">
        <!-- <li>
            <img src="https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/6d0a3e7acc3e91e2cfd83dbbe1d1c029.jpg?thumb=1&w=400&h=400&f=webp&q=90" alt="">
            <h3>小米青春版</h3>
            <p>轻薄5G,内外兼修</p>
            <span>1999</span>
        </li> -->
        

    </ul>


    <script>

        var data = [
            {
                price : 1999,
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : '小米青春版' ,
                content : '轻薄5G,内外兼修' ,
                
            },
            {
                
                title : '小米青春版2' ,
                content : '轻薄5G,内外兼修2' ,
                price : 1299,
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : '小米青春版' ,
                content : '轻薄5G,内外兼修' ,
                price : 1999
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : '小米青春版' ,
                content : '轻薄5G,内外兼修' ,
                price : 1999
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : '小米青春版' ,
                content : '轻薄5G,内外兼修' ,
                price : 1999
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : '小米青春版2' ,
                content : '轻薄5G,内外兼修2' ,
                price : 1299
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : '小米青春版' ,
                content : '轻薄5G,内外兼修' ,
                price : 1999
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : '小米青春版' ,
                content : '轻薄5G,内外兼修' ,
                price : 1999
            }
        ]

        var res = '' ;
        // data.forEach(function (v , i) {  
        //     res += '<li>'
        //     // res += '<img src ="v.img">'
        //     res += '<img src ="' + v.img + '">'
        //     res += '<h3>' + v.title + '</h3>'
        //     res += '<p>' + v.content + '</p>'
        //     res += '<span>' + v.price + '</span>'
        //     res += '</li>'
        // })

        data.forEach(function (v , i) {  
             res += `
                <li>
                    <img src="${v.img}" alt="">
                    <h3>${v.title}</h3>
                    <p>${v.content}</p>
                    <span>${v.price}</span>
                </li>
                `
        })
        

        var oList = document.getElementById('list') ;
        oList.innerHTML = res

    </script>

模板字符串商品列表

    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        ul{
            width: 1200px;
            margin: auto;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-evenly;
        }
        li{
            width: 23%;
            border: 1px solid #000;
            text-align: center;
            line-height: 2;
            margin: 10px;
        }
        li img{
            width: 90%;
        }
        li span{
            color: hotpink;
        }
        div{
            justify-content: center;
            display: flex;
            height: 30px;
            margin: 20px;
        }
    </style>
</head>
<body>

    <div>
        <input type="text" id="inp">
        <button id="btn">搜索</button>
    </div>

    <ul id="list">
        <!-- <li>
            <img src="https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/6d0a3e7acc3e91e2cfd83dbbe1d1c029.jpg?thumb=1&w=400&h=400&f=webp&q=90" alt="">
            <h3>小米青春版</h3>
            <p>轻薄5G,内外兼修</p>
            <span>1999</span>
        </li> -->
        

    </ul>


    <script>

        var data = [
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : 'iPhone 13' ,
                content : '256G 粉色' ,
                price : '¥6799'
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : 'iPhone 13' ,
                content : '256G 粉色' ,
                price : '¥6799'
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : 'iPhone 13' ,
                content : '256G 粉色' ,
                price : '¥6799'
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : 'iPhone 13' ,
                content : '256G 粉色' ,
                price : '¥6799'
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : 'iPhone 13' ,
                content : '256G 粉色' ,
                price : '¥6799'
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : 'iPhone 13' ,
                content : '256G 粉色' ,
                price : '¥6799'
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : 'iPhone 13' ,
                content : '256G 粉色' ,
                price : '¥6799'
            },
            {
                img : 'https://img12.360buyimg.com/n1/s450x450_jfs/t1/202012/26/7810/187251/614be59dE69c8da89/58a0fe2a2ca998f1.jpg' ,
                title : 'iPhone 13' ,
                content : '256G 粉色' ,
                price : '¥6799'
            }
        ]

        var oList = document.getElementById('list') ;
         // 搜索功能
        var oBtn = document.getElementById('btn') ;
        var oInp = document.getElementById('inp') ;


        list(data)

        function list(arr) {  
            var res = '' ;

            arr.forEach(function (v , i) {  
                res += `
                    <li>
                        <img src="${v.img}" alt="">
                        <h3>${v.title}</h3>
                        <p>${v.content}</p>
                        <span>${v.price}</span>
                    </li>
                    `
            })

            
            oList.innerHTML = res
        }



       
        oBtn.onclick = function () {  
            var kw = oInp.value ;
            // 找到满足条件的数据  filter

            // var res = arr.filter(function (v) {  
            //     return v > 60
            // })


            var data2 = data.filter(function (v) {  
                return v.title.includes(kw)
            })

            console.log(data2);

            list(data2)

            
        }


    </script>
</body>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值