数组
一、数组api
- 数组的方法 push和unshift 都是添加 都返回新数组
- pop和shift都是删除 都返回删除的那个值
- 都会改变原数组的长度
- 数组的遍历
- forEach(item,index,arr)arr可以不填 若填了可以用this
- for index in 下标 for item of 数值
- slice(开始索引,结束索引(不包含结束那个)) 提取元素 返回一个新数组 原数组不改变
- splice(开始索引,删除几个)删除指定位置的元素 原数组改变返回删除的那几个元素
- splice(开始索引,删除几个,增加,增加)删除指定位置的元素 并向开始索引之前添加原数组改变哪怕增加了也只是返回删除的那几个元素
- 没有split()那是用于字符串的分割
- join()类似于split 用于将数组变为字符串用参数连接 不改变原数组
- sort(function)排序 改变原数组
- reverse()反转 改变原数组
- concat(arr2,‘s’)连接2个数组 还可以再末尾添加元素 不改变原数组
- copywithin(targe,sart,end)从开始到结尾向目标处替换
- find(函数)通过函数return的条件 来返回第一个符合条件的值
- findindex(函数)通过返回条件返回数组下标(区分字符串的indexof 那是输入一个字符返回下表)
- incledes (值)是否包含这个值 返回true或false 区分find 那是返回值或下标
- indexof和字符串的用发一样 返回下标或-1
- key value entries 都是返回便利器对象用于for of 不知道为什么不直接foreach
- 总结 除了提取slice 连接concat join转为字符 不改变原数组 其他都改变
- 数组的遍历都可以传 arr在函数中用this
二、数据遍历
- forEach遍历数组
arr.forEach(function(item,index,arr){
})
注意在里面 return 不会终止循环
2. filter过滤器
回调函数里面return过滤的条件(表达式) 返回一个新数组 不改变原数组
也是循环 每次遍历都把符合条件的值返回回来形成一个新数组
let newArr=arr.filter((item,index,arr)=>{
return item<20
//return item%2==0 可以返回一个表达式
})
- some()
检测数组中的元素是否满足条件 返回true或false
如果找到第一个符合条件的 就终止(因为就可以返回true了)
let flag=arr.some((item,index,arr)=>{
return item<20
//if(item<20){
//return true
}
})
注意 与includes的区别 一个是传的值 一个传的条件表达式
与filter的区别 一个是是否满足表达式 一个是是否存在 一个是返回新数组 一个返回true 一个全部循环 一个找到就停止循环
与forEach的区别 forEach也是全部都循环 哪怕在条件里加了 return true 也不会终止循环
- every(function)
和some和filter一样回调函数return条件
arr.map((item,index))
let flag=arr.every((item,index)=>{
return item>10
})
区别 some every只有当所有值都满足才为true some一个满足就true
- map()
对数组遍历 里面的每一个数进行处理 然后返回一个新数组
let newarr = arr.map( res => {
return res + 2 //自定义
})
总结
除了foreach其他都有回调函数的return 都有函数遍历的返回值(新数组或boolean)
- foreach为了遍历数组 改变数组中的值 没有返回值 遍历return不会停下
- map遍历数组中的值对他们每一个进行一些操作 返回一个新数组 回调函数return 要进行的操作
- filter 对数组过滤 回调return 条件 返回一个新数组 遍历时看每一个值 符合条件就加入新数组
- some return条件 看数值是否有符合条件的 找到一个就返回true不会全部遍历
- every return条件 数值全部符合return true一定会全部遍历不会停下