js高级 商品查询案例-利用数组的新增方法操作数据

    <div class="search">

        按照价格查询: <input type="text" class="start"> - <input type="text" class="end"> <button class="search-price">搜索</button> 按照商品名称查询: <input type="text" class="product"> <button class="search-pro">查询</button>

    </div>

    <table>

        <thead>

            <tr>

                <th>id</th>

                <th>产品名称</th>

                <th>价格</th>

            </tr>

        </thead>

        <tbody>

        </tbody>

    </table>

js部分

    <script>

        // 利用新增数组方法操作数据

        // data 里面存放的就是我们要渲染到页面上的数据

        var data = [{

            id: 1,

            pname: '小米',

            price: 3999

        }, {

            id: 2,

            pname: 'oppo',

            price: 999

        }, {

            id: 3,

            pname: '荣耀',

            price: 1299

        }, {

            id: 4,

            pname: '华为',

            price: 1999

        }, ];

        // 1.获取元素

        var tbody = document.querySelector('tbody')

        var start = document.querySelector('.start')

        var end = document.querySelector('.end')

        var search_price = document.querySelector('.search-price')

        var product = document.querySelector('.product')

        var search_pro = document.querySelector('.search-pro')

        // 2.封装 渲染UI结构 的函数

        function setData(myData) {

            // 注意先清空再渲染

            tbody.innerHTML = ''

                // 遍历数组

            myData.forEach(function(value) { // value 是数组的每一项,它是一个对象

                // console.log(value);

                // // 写法一:insertAdjacentHTML() 直接创建元素并添加元素

                // var str = '<tr><td>' + value.id + '</td><td>' + value.pname + '</td><td>' + value.price + '</td></tr>'

                // tbody.insertAdjacentHTML('beforeend', str)

                // 写法二:先创建元素createElement(),再添加元素appendChild()

                var tr = document.createElement('tr')

                tr.innerHTML = '<td>' + value.id + '</td><td>' + value.pname + '</td><td>' + value.price + '</td>'

                tbody.appendChild(tr)

            })

        }

        setData(data) // 页面一刷新就调用一次,防止页面出现空白

        // 3.根据价格查询商品 筛选商品

        search_price.addEventListener('click', function() {

            // 我们要根据价格筛选出所有满足条件的商品,所以这里使用 filter() 循环会比较合适

            // filter() 返回的是一个新数组

            var newData = data.filter(function(value) { // value 是一个对象

                    // 筛选出 比前一个输入框的价格高,比后一个输入框的价格低 的商品

                    return value.price >= start.value && value.price <= end.value

                        // 因为 return 会返回一个值,所以在外面我们需要声明一个变量来接收返回过来的值。

                })

                // 将筛选出来的数据渲染到UI结构上

            setData(newData)

        })

        // 4.根据商品名称查询商品

        // 如果要查找的元素是数组中唯一的元素,使用some()效率会更高,我们只要找到了匹配的元素就终止代码

        search_pro.addEventListener('click', function() {

            // 因为我们渲染的是数组,所以这里需要声明一个空数组,将下面挑选出来的value值追加到这新数组里面进行渲染

            var arr = []

            data.some(function(value) {

                    // 如果输入的商品名与某个value里面的商品名相同,就把这个value选出来

                    if (value.pname === product.value) {

                        // console.log(value);

                        arr.push(value)

                        return true // 这里必须写true,表示找到了匹配值终止代码退出循环

                            // 因为some()返回的是布尔值,所以return后面必须写布尔值

                    }

                })

                // 渲染 UI 结构

            setData(arr)

        })

        // forEach()和filter() 循环使用 return 都不会终止代码,当数组中所有元素都遍历完毕之后才会退出循环。

        // some() 使用 return 可以终止代码,当我们找到了一个匹配的元素时,就不再往下寻找,直接退出循环。

        // forEach()用来筛选数组,会筛选出所有满足条件的元素,它会遍历数组中的每一个元素;

        // 而some()是用来判断某个数组元素是否存在的,只要找到了一个,就会终止代码退出循环,所有some()可能不会遍历数组中的每一个元素。

    </script>

    <div class="search">
        按照价格查询: <input type="text" class="start"> - <input type="text" class="end"> <button class="search-price">搜索</button> 按照商品名称查询: <input type="text" class="product"> <button class="search-pro">查询</button>
    </div>
    <table>
        <thead>
            <tr>
                <th>id</th>
                <th>产品名称</th>
                <th>价格</th>
            </tr>
        </thead>
        <tbody>

        </tbody>
    </table>
    <script>
        // 利用新增数组方法操作数据
        // data 里面存放的就是我们要渲染到页面上的数据
        var data = [{
            id: 1,
            pname: '小米',
            price: 3999
        }, {
            id: 2,
            pname: 'oppo',
            price: 999
        }, {
            id: 3,
            pname: '荣耀',
            price: 1299
        }, {
            id: 4,
            pname: '华为',
            price: 1999
        }, ];

        // 1.获取元素
        var tbody = document.querySelector('tbody')
        var start = document.querySelector('.start')
        var end = document.querySelector('.end')
        var search_price = document.querySelector('.search-price')
        var product = document.querySelector('.product')
        var search_pro = document.querySelector('.search-pro')

        // 2.封装 渲染UI结构 的函数
        function setData(myData) {
            // 注意先清空再渲染
            tbody.innerHTML = ''
                // 遍历数组
            myData.forEach(function(value) { // value 是数组的每一项,它是一个对象
                // console.log(value);

                // // 写法一:insertAdjacentHTML() 直接创建元素并添加元素
                // var str = '<tr><td>' + value.id + '</td><td>' + value.pname + '</td><td>' + value.price + '</td></tr>'
                // tbody.insertAdjacentHTML('beforeend', str)

                // 写法二:先创建元素createElement(),再添加元素appendChild()
                var tr = document.createElement('tr')
                tr.innerHTML = '<td>' + value.id + '</td><td>' + value.pname + '</td><td>' + value.price + '</td>'
                tbody.appendChild(tr)
            })
        }
        setData(data) // 页面一刷新就调用一次,防止页面出现空白

        // 3.根据价格查询商品 筛选商品
        search_price.addEventListener('click', function() {
            // 我们要根据价格筛选出所有满足条件的商品,所以这里使用 filter() 循环会比较合适
            // filter() 返回的是一个新数组
            var newData = data.filter(function(value) { // value 是一个对象
                    // 筛选出 比前一个输入框的价格高,比后一个输入框的价格低 的商品
                    return value.price >= start.value && value.price <= end.value
                        // 因为 return 会返回一个值,所以在外面我们需要声明一个变量来接收返回过来的值。
                })
                // 将筛选出来的数据渲染到UI结构上
            setData(newData)
        })

        // 4.根据商品名称查询商品
        // 如果要查找的元素是数组中唯一的元素,使用some()效率会更高,我们只要找到了匹配的元素就终止代码
        search_pro.addEventListener('click', function() {
            // 因为我们渲染的是数组,所以这里需要声明一个空数组,将下面挑选出来的value值追加到这新数组里面进行渲染
            var arr = []
            data.some(function(value) {
                    // 如果输入的商品名与某个value里面的商品名相同,就把这个value选出来
                    if (value.pname === product.value) {
                        // console.log(value);
                        arr.push(value)
                        return true // 这里必须写true,表示找到了匹配值终止代码退出循环
                            // 因为some()返回的是布尔值,所以return后面必须写布尔值
                    }
                })
                // 渲染 UI 结构
            setData(arr)
        })

        // forEach()和filter() 循环使用 return 都不会终止代码,当数组中所有元素都遍历完毕之后才会退出循环。
        // some() 使用 return 可以终止代码,当我们找到了一个匹配的元素时,就不再往下寻找,直接退出循环。

        // forEach()用来筛选数组,会筛选出所有满足条件的元素,它会遍历数组中的每一个元素;
        // 而some()是用来判断某个数组元素是否存在的,只要找到了一个,就会终止代码退出循环,所有some()可能不会遍历数组中的每一个元素。
    </script>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript数组有很多内置方法,可以操作和处理数据。以下是JavaScript数组的所有方法列表: 1. `concat()` - 连接两个或多个数组。 2. `copyWithin()` - 在数组内部将一段元素拷贝到另一个位置。 3. `entries()` - 返回一个迭代器对象,可以遍历数组所有的键值对。 4. `every()` - 检查数组中的所有元素是否满足一个条件。 5. `fill()` - 用静态值填充一个数组中的所有元素。 6. `filter()` - 通过指定条件过滤出符合条件的数组元素。 7. `find()` - 返回找到的第一个元素,满足条件。 8. `findIndex()` - 返回目标元素索引,满足条件。 9. `forEach()` - 遍历数组,对每个元素执行指定的操作。 10. `includes()` - 判断数组是否包含指定元素。 11. `indexOf()` - 返回指定元素第一个出现的位置索引。 12. `join()` - 连接数组元素,返回字符串。 13. `keys()` - 返回一个迭代器对象,可以遍历数组的键。 14. `lastIndexOf()` - 返回指定元素最后一次出现的位置索引。 15. `map()` - 遍历数组,对每个元素执行指定的操作,将结果放入新数组。 16. `pop()` - 删除数组最后一个元素。 17. `push()` - 在数组末尾添加一个或多个元素。 18. `reduce()` - 对数组中的每个元素执行指定的操作,累积计算并返回最终结果。 19. `reduceRight()` - 与reduce()方法类似,不过是从右到左遍历数组。 20. `reverse()` - 反转数组元素的顺序。 21. `shift()` - 删除数组的第一个元素。 22. `slice()` - 截取数组元素,返回新数组。 23. `some()` - 检查数组中是否存在至少一个元素满足一个条件。 24. `sort()` - 排序数组元素。 25. `splice()` - 删除、插入或替换数组中的元素。 26. `toString()` - 将数组转换成字符串。 27. `unshift()` - 在数组的开头添加一个或多个元素。 28. `valueOf()` - 返回数组本身。 以上方法中,有些方法会改变原数组,有些方法则不会。需要注意使用时,避免产生错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值