6.19 js在案例中的使用

101 阅读2分钟

js基础复习

打印多行多列小星星

  • 凡是看到多行多列这样的需求,先 打印出一行(一行有多列) -- for循环
  • 再打印出多行:for循环
// 打印出多行
for (let j = 0; j < 5; j++) {
    // 先打印出一行中的多个心心
    for (let i = 0; i < 5; i++) {
        document.write('❤️')
    }
    // 换行
    document.write('<br>')
}

数组-求和,最大值和最小值

  • 定义函数,实现业务处理,并返回处理结果
  • 求和:获取数组中的每一个数据 --循环--for
  • 最大值,最小值: 判断 -- if
  • 返回三个值:包装为对象
// arr:数组类型,由用户进行传递
function getResults(arr) {
    // 变量在先声明赋值再使用
    let sum = 0,
        max = arr[0],
        min = arr[0]
​
    // 遍历数组,获取每一个值
    for (let i = 0; i < arr.length; i++) {
        // 求和
        sum += arr[i]
        // 求最大值
        if (max < arr[i]) {
            max = arr[i]
        }
        // 求最小值
        if (min > arr[i]) {
            min = arr[i]
        }
    }
    // 返回处理结果
    // return { 'sum': sum, 'max': max, 'min': min }
    // es6规定:如果对象的键和值同名,可以只写一个,代表键值同名
    return { sum, max, min }
}
​
// 调用方法接收返回值
let results = getResults([12, 3, 2445, 6, 47, 5867, 8, 679])
console.log(results)

根据数据生成柱状图

  • 需求

    • 接收用户输入的四个值
    • 根据数据生成柱状图
  • 步骤

    • 要动态先静态

    • 动态结构的生成--遍历拼接

      • 接收用户数据,并存储到数组 -- 定义数组 push方法追加数据
      • 遍历数组,拼接生成柱状图
// 定义一个数组用于存储用户输入的数据
let datas = []
for (let i = 0; i < 4; i++) {
    datas.push(+prompt(`请输入第${i + 1}季度的数据`))
}
// 动态渲染-遍历拼接
let htmlStr = '<div class="box">'
for (let i = 0; i < datas.length; i++) {
    htmlStr += `<div class="sub" style='height:${datas[i]}px'>
                  <span>${datas[i]}</span>
                  <p>第${i + 1}季度</p>
                </div>`
}
htmlStr += '</div>'
​
// 在页面中输出
document.write(htmlStr)

删除数组中所有的偶数-filter方法的使用

以后不要直接使用索引来删除数组--确保索引是正确的索引

// 数据有四种操作:增加,删除,修改,查询
// filter:在学习后台接口之前,本地数据的 查询和删除  都是filter的菜
let arr = [12, 3, 234, 23, 53546, 7, 58, 67, 899, 78]
​
let temp = arr.filter(function(value, index) {
    // 添加过滤条件
    return value % 2 !== 0
})
​
console.log(temp)
​
// 数组.filter(  回调函数(value,index){ return 过滤条件}   )
// 1.它会 从头到尾 遍历指定的数组
// 2.每次会将遍历到的数据及索引传递给回调函数
// 3.它会执行回调函数,如果回调函数的返回结果为true,就将当前数据存储到内部数组中
// 4.最终将内部数组返回

使用forEach实现渲染

// 使用forEach实现数组的遍历
// 如果是遍历数据,那么参数名称一般就是 value  index
// 如果是遍历元素伪数组,那么参数名称一般就是 element  index
data.forEach(function(value, index) {
    htmlStr += `<li>
                      <img src="${value.src}" alt="" />
                      <h4>
                          ${value.title}
                      </h4>
                      <div class="info">
                        <span>高级</span> • <span>${value.num}</span>人在学习
                      </div>
                    </li>`
})

1~100中前4个能被7整除的数

  • 1- 100 的数: for 遍历

  • 能被7整除: if判断: 数 % 7 == 0

  • 前4个:

    • 每次获取到满足条件的数,就将标识值 + 1 -- 自己定义一个标识
    • 将所有的数获取到,再取前4个,也可以判断数组的长度是否到4 -- 自定义一个数组
let arr = [] // 满足条件的数的集合--数组
// 1~100中前4个能被7整除的数
for (let i = 1; i <= 100; i++) {
    // 能被7整除
    if (i % 7 == 0) {
        // 满足条件,让count++
        arr.push(i)
        // 判断是否有4个了,如果有4个了,那中止循环
        if (arr.length == 4) {
            break
        }
    }
}
console.log(arr)

随机生成16进制的颜色

  • 分析业务

    • 随机: Math.random() :生成0-1之间的随机数
    • 16进制:0、1、2、3、4、5、6、7、8、9 、A、B、C、D、E、F
    • 颜色:# + 6位16进制值
  • 步骤

    • 为了让随机数和颜色值产生对应关系,将16进制的颜色值存储到数组中,那么随机数就是索引下标
    • 6位颜色值需要我们添加循环,进行拼接
function getColor() {
    let colors = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F']
    let index // 随机生成的索引值,这个索引对应着一个颜色值
    let str = '#' // 颜色值
    // 添加一个循环
    for (let i = 0; i < 6; i++) {
        // 随机生成一个索引
        index = parseInt(Math.random() * colors.length)
        // 进行颜色的拼接
        str += colors[index]
    }
    return str
}
​
setInterval(function() {
    // 获取p元素,并且为p元素设置样式
    document.querySelector('p').style.color = getColor()
}, 100)

驼峰命名法

封装一个函数,实现功能:往函数传参为该格式字符串:'gEt-elemEnts-by-class-name',得到驼峰命名法的返回值为‘getElementsByClassName’

  • 第一个单词转小写
  • 后续每个单词的首字母转大写,其它的字符转小写

步骤

  • 先获取每个单词,每个单词以-分隔:split('分隔符') 》》数组

  • 遍历数组,获取每一个单词

    • 第一个单词,转小写 >> toLowerCase()

    • 后续的单词:

      • 首字符转大写

        • 获取首字母

          • 字符串[0]
          • 字符串.substring(0,1) >> substring(起始索引,结束索引) | substr(起始索引,长度)
        • 转大写 >> toUpperCase()

      • 其它字符转小写

        • 获取除首字母之外的其它字符:字符串.substring(1)
        • 转小写 >> toLowerCase()
      • 拼接

        • join('指定连接符')
  • 返回结果

// 封装一个函数,实现功能:往函数传参为该格式字符串:'get-elements-by-class-name',得到驼峰命名法的返回值为‘getElementsByClassName’
function camelName(str) {
    // 1.将字符串拆分为数组
    let arr = str.split('-')
    console.log(arr) // ['get', 'elements', 'by', 'class', 'name']
    // 2.遍历数组,获取每个单词
    arr.forEach(function(value, index) {
        // 2.1 处理第一个单词:index == 0
        if (index == 0) {
            // 第一个单词转小写
            arr[index] = value.toLowerCase()
        } else {
            // 2.2 后续单词:首字符转大写 + 其它字符转小写
            arr[index] =
                value[0].toUpperCase() + value.substring(1).toLowerCase()
        }
    })
    // 3. 返回拼接的结果
    return arr.join('')
}
​
let result = camelName('GEt-elEMEnts-by-class-name')
console.log(result)
数组:
push():在数组的最后追加成员
splice(索引,长度):删除数组成员
join('连接符'):将数组的每一个成员以指定的字符进行连接
unshift:在数组的最前面插入成员
​
​
字符串
split('分隔符'):将字符串以指定字符进行分隔,返回数组
toUpperCase():转大写
toLowerCase():转小写
substr(起始索引,长度):截取从起始索引开始的指定长度的字符串,如果没有指定第二个参数,则从起始索引一直截取到最后
substring(起始索引,结束索引):截取字符串,从起始索引开始到结束索引之前的一个字符串结束,如果没有指定第二个参数,则从起始索引一直截取到最后

参数字符串转对象

有一个url(字符串)如下: www.heima.com?key0=haha&key1=hello&key2=xixi ; 要求处理此url, 得到一个如下格式的对象: let obj = { key0:’haha’, key1:’hello’, key2:’xixi’ }

  • 获取 key0=haha&key1=hello&key2=xixi : split('?')[1]

  • 将参数部分再以&符号进行分隔:['key0=haha', 'key1=hello', 'key2=xixi']

  • 遍历数组,对每一组键值进行处理

    • 再以=进行分隔,获取具体的键和值
    • 为对象添加属性值
// 有一个url(字符串)如下: http://www.heima.com?key0=haha&key1=hello&key2=xixi; 要求处理此url, 得到一个如下格式的对象: let obj = { key0:’haha’, key1:’hello’, key2:’xixi’ }

let obj = {}

let str = 'http://www.heima.com?key0=haha&key1=hello&key2=xixi'
console.log(str)

// 获取参数部分,?后面的就是参数部分,可以以split进行分隔
let params = str.split('?')[1] // key0=haha&key1=hello&key2=xixi
// console.log(params)

// 将参数部分再以&符号进行分隔,也是使用split方法,获取的还是一个数组
let arr = params.split('&') // ['key0=haha', 'key1=hello', 'key2=xixi']
// console.log(arr)
// 遍历数组
for (let i = 0; i < arr.length; i++) {
    // console.log(arr[i]) // key0=haha
    // console.log(arr[i].split('='))
    let subArr = arr[i].split('=') // ['key0','haha']
    // let key = subArr[0]
    // 为对象添加键值对
    // 由于键是一个变量所以只能使用[]方式进行操作
    // 如果key不存在,就是添加
    obj[subArr[0]] = subArr[1]
    // console.log(obj)
}

console.log(obj)

对象转参数字符串

有一个对象如{name:'jack',age:20},转换为name=jack&age=20

  • 获取每一组键值对 -- 遍历:for ... in
  • 拼接,拼接为key=value这种格式
  • 注意&符号的拼接
// 有一个对象如{name:'jack',age:20},转换为name=jack&age=20
let obj = { name: 'jack', age: 20 }
// let str = ''
let arr = []

for (let key in obj) {
    console.log(key, obj[key])
    // str += `${key}=${obj[key]}&`
    arr.push(`${key}=${obj[key]}`)
}

// console.log(str.substr(0, str.length - 1))
console.log(arr.join('&'))

\