循环与数组的使用

88 阅读4分钟
循环:

思想:箩筐思想、打擂思想

语法看上面

for循环最大价值:循环数组

for与while的区别:前者循环次数一般明确,后者循环次数不明确

嵌套循环-》双层循环-》典型案列:冒泡排序、九九乘法表

空间复杂度:

时间复杂度:

VC用户代码片段:

自定义Emma缩写快捷键,在javaScript.json中定义

数组

概念:

说法一、一种可以按顺序保存数据的数据类型;

说法二、 有序的元素序列,有限个相同类型的变量集合。

一为JS定义、二为C定义,二者区别如下:

JavaScript中数组为Obeject类型,对元素类型不作严格要求,C中的数组为具体的类型数组:int数组、string数组、float数组等等

组成术语:元素、下标、长度

作用:

统一存储相同类型、相同数据定义的有限多个数据

基本使用:
1、声明语法

let ArrayName = [item1,item2,·······,itemN]

PS:let array = [' ', ,null,2] array.length = 4 array[1] = undefined

索引/下标

itemN == ArrayName[N-1]

2、练习题

数组求和与平均值、最大最小值、

3、数组操作

查询数组数据:itemN = array[N]

修改数组数据:array[N] = newItem

PS:越位赋值,中间自动只为空属性undefined

追加数据(一或多):array.push(item[]) 返回新数组长度

头部插入(一或多):array.unshift(item[]) 返回数组长度

尾部删除:array.pop() 返回删除的元素(单个)

头部删除:arryay.shift() 返回删除的元素(单个)

定点删除:array.splice(下标start,个数deleteCount) 返回删除的元素(数组)

PS:1、超额删除会自动识别停止

2、start为负值时,其意思为倒数第几

3、deleteCount参数不设置则会删除后续全部

使用案列:九九乘法表、单次重复抽奖、冒泡排序、数组柱形图

4、扩充

一、数组方法:

let arr = []
//反转数组
arr.reverse()
//升序排列
arr.sort(function (){ return a - b })
//降序排序
arr.sort(function (){return b - a })
//清空数组
arr.length = 0
//连接数组元素转为字符串   默认连接符“,”
arr.join()
//删除并从index位置依次添加元素--》替换
arr.splice(index,howmany,arr1,arr2...)

PS:

1、arr.length=0和arr=[]都可以清空数组

2、字符串不可以通过string.length=0来清空,可以使用string=“”

二、数组遍历方法

let arr = []
//调用数组的每个元素,将其传递给回调函数,原数组不变
arr.forEach(function)
//调用数组的每个元素,返回一个新数组,原数组不变
arr.map(function)
//过滤数组并返回新数组,要return 条件
arr.filter(function(item){condition return key})
arr.filter(function(v){
    //返回大于10的数
    return v>10
})

三、交换数组

普通方式

let a = 1,b=10
a += b
b = a - b
a -= b

数组方式

let a = 1,b=10;
[a,b] = [b,a]

四、展开运算符

语法:

 ...对象

展开对象,解决值复制的问题,

let arr = [1,2,3,4]
let obj = {
    name:"ffa",
    sex: 'man'
}
let newArr = [...arr]
let newObj = ...obj

解决Math.max/min()参数传递问题

let arr = [1,2,3,4,5]
console.log(Math.max(...arr),Math.min(...arr))

扩充代码

基本用法

// ****************************************************************************
​
        //反转数组,原数组受影响
        let reverseArr = arr.reverse()
        console.log(reverseArr,arr); 
​
        //数组升序降序,改变数组
        let numberArr = [1,2,43,54,23,-4,65]
        arr.sort(function(a,b){return a-b})
        console.log(arr);
        arr.sort(function (a,b){return b-a})
        console.log(arr);
        numberArr.sort(function(a,b){return a-b})
        console.log(numberArr);
        numberArr.sort(function(a,b){return b-a})
        console.log(numberArr);
​
        //清空数组
        arr.length = 0
        console.log(arr);
​
        //用特定连接符连接数组元素,返回字符串,不影响原数组
        numberArr.join("+")
        let joinStr = numberArr.join("+")
        console.log(numberArr,joinStr);
​
        // 删除替换
        numberArr.splice(1,1,-5,-6)
        console.log(numberArr);
        numberArr.splice(1,0,54)
        console.log(numberArr);
​
​
// *************************************************************************
​
​
        // 数组遍历方法
        //回调函数声明时设置了参数,调用时会被默认赋值为[元素值,索引下标,所属数组]
        //思考传递的参数为引用类型还是值类型?答:引用类型
        function BL1(){
            console.log(arguments);
            // console.log(item,num,num1);
        }
        //forEach中传递的参数为   [元素值,索引下标,所属数组]
        //forEach没有返回值:undefined
        console.log(numberArr.forEach(BL1));
        console.log(numberArr);
        
        function BL2(){
            return arguments[1]
        }
        //map 传递参数为: [元素值,索引下标,所属数组]
        //map 返回值为: 将每个元素执行函数的返回值组合的数组
        console.log(numberArr.map(BL2));
        console.log(numberArr);
​
        //filter 过滤数组
        //传递值:[元素值,索引下标,所属数组]
        //返回值:return 的数组
        function BL3(item){
            console.log(arguments);
            // return arguments[0]==54?undefined:arguments[0]
            return item > 20
        }
        console.log(numberArr.filter(BL3));

案例

数组去重

        function quchong(item){
            //用filter
            let newArr = item.filter((v,i,a)=>{
                //对每一个进行新数组存在判断
                //indexOf绝对能找到,返回的是索引,i是当前索引
                //两者进行比较就好
                //fileter 本质要求返回的是Boolean值
                //return a.indexOf(v)===i?v:undefined
                return a.indexOf(v) === i
            })
            console.log(newArr);
        }

解析URL

        function analyseUrl(url) {
            //定义存储对象
            let obj = {}
            //查找第一次出现?的索引位置
            let addr = url.indexOf("?")
            //提取参数字符串
            // let str = url.substr(addr + 1, url.length - addr)
            let str = url.substr(addr+1)
            //分割字符串
            let splitArr = str.split("&")
            // 对每个元素进行识别处理
​
            //map遍历,二元数组方式
            let newArr = splitArr.map((v,i)=>{
                //将元素里分为两个元素并存入新数组中,以‘=’为隔
                //split返回的是数组,自动赋值
                return v.split('=')
            })
            //遍历newArr,对象赋值
            newArr.forEach((v,i) => {
                obj[v[0]] = v[1]
            });
​
            //使用forEach遍历
/*             splitArr.forEach((v,i)=>{
                let indexData = v.indexOf('=')
                let attribute = v.substr(0,indexData)
                let proValue = v.substr(indexData+1)
                obj[attribute] = proValue
            }) */
​
            //for遍历
/*             for (let i = 0; i < splitArr.length; i++) {
                //查找“ = ”
                let indexData = splitArr[i].indexOf("=")
                //存储属性名
                let attribute = splitArr[i].substr(0, indexData)
                //存储value
                let proValue = splitArr[i].substr(indexData + 1, splitArr[i].length - indexData)
                //添加属性
                obj[attribute] = proValue
            } */
            return obj
        }

\