循环:
思想:箩筐思想、打擂思想
语法看上面
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
}
\