一.可以将数组转为字符串的方法
1.toString()
toString()方法会把一个数组转为字符串,并且用逗号隔开
let arr = ['1','2','3']
let str = arr.toString()
console.log(str); // 1,2,3
console.log(typeof str); // string
2. String()
let arr = ['1','2','3']
let str = String(arr)
console.log(str); // 1,2,3
console.log(typeof str); // string
3.join(连接符) -- 默认使用英文逗号, 作为连接符,此时和 toString()的效果是一致的。
let arr = ['1','2','3']
let str = arr.join()
let str1 = arr.join('-') // 也可以使用不同的连接符
console.log(str); // 1,2,3
console.log(str1); // 1-2-3
console.log(typeof str); // string
二.数组元素的添加和删除
数组方法 | 作用 | 原数组是否改变 |
push() | 向数组的最后面插入一个或多个元素,返回结果为新数组的长度 | 会改变原数组 |
pop() | 删除数组中的最后一个元素,返回结果为被删除的元素 | 会改变原数组 |
unshift() | 在数组最前面插入一个或多个元素,返回结果为新数组的长度 | 会改变原数组 |
shift() | 删除数组中的第一个元素,返回结果为被删除的元素 | 会改变原数组 |
splice() | 从数组中删除或替换指定的一个或多个元素,返回结果为被删除元素组成的新数组 | 会改变原数组 |
concat() | 合并数组:连接两个或多个数组,返回结果为新的数组 | 不会改变原数组 |
slice() | 从数组中提取指定的一个或多个元素,返回结果为新的数组 | 不会改变原数组 |
在这重点说splice()和slice(),这俩很容易搞混
1.splice()
括号中有两个参数,(开始索引<包含>,删除几个)
let arr = ['张三','里斯','王五','赵六']
let arr1 = arr.splice(0,1)
let arr2 = arr.splice(0,2)
console.log(arr1); // ['张三']
console.log(arr2); // ['张三', '里斯']
还有第三个参数,(开始索引<包含>,删除几个,替换元素)
let arr = ['张三','里斯','王五','赵六']
let arr3 = arr.splice(1,1,'小明') // 从索引为1的地方删除一个元素,替换成小明
console.log(arr3); // ['里斯']
console.log(arr) // ['张三', '小明', '王五', '赵六']
2. slice()
他也有俩个参数(开始索引<包含>,结束索引<不包含>)
let arr = ['张三','里斯','王五','赵六']
let arr1 = arr.slice(0,1) // 从索引为0的位置截取到索引为 1 的位置,但是不包含索引为1的元素
console.log(arr1); // 截取出来的元素 ['张三']
eg:一维数组转二维数组
let arr = ['1','2','3','4','5','6','7','8','9','10']
let arr1 = arr.slice(0,5)
let arr2 = arr.slice(5)
let arr3 = []
arr3.push(arr1,arr2)
console.log(arr3)
eg2:手机号截取=>184****6765
let str = 18411111111
//注意类型,先得转成字符串,才能分割
let str1 = str.toString().slice(0,3) + '****' + str.toString().slice(-4)
console.log(str1);
三.遍历数组
常用的遍历数组的方法有forEach()、map()、filter()、reduce()、for循环、for of等
1.forEach()
首先forEach()没有返回值,所以接收到的市undefined
let arr = [1,2,3]
arr.forEach((it,idx)=>{
it = it * 2
})
console.log(arr); // [1, 2, 3]
这种写法改变不了原数组的,如果您想用forEach()改变原数组的话,可以试试下面这种方法
let arr = [1,2,3]
arr.forEach((it,idx)=>{
arr[idx] = arr[idx] * 2
})
console.log(arr); // [2,4,6]
2.map()
主要是映射出新数组
let arr = [1,2,3]
let arr1 = arr.map((it,idx)=>{
return it * 2
})
//或简写
let arr1 = arr.map((it,idx)=>it * 2)
console.log(arr1); // [2, 4, 6]
//把每一项的id放到一个新数组中
let arr = [{id:11,name:'张三'},{id:22,name:'里斯'},{id:33,name:'王五'}]
let ids = arr.map((it,idx)=>it.id)
console.log(ids); // [11, 22, 33]
有一个使用场景,给数组的每一项加一个type,并且每一项的键名为url
let arr3 = ['xxx','xxx','xxx']
//第一项的type是video
let arr1 = arr3.map((it,idx)=>{return {type:idx == 0?'video':image',url:it}})
console.log(arr1);
3.filter()
过滤出及格的人
let arr = [{id:11,name:'张三',score:60},{id:22,name:'里斯',score:59},{id:33,name:'王五',score:90}]
//过滤出及格的人
let arr1 = arr.filter((it,idx)=>it.score >=60)
console.log(arr1);
过滤出及格的id
let arr = [{id:11,name:'张三',score:60},{id:22,name:'里斯',score:59},{id:33,name:'王五',score:90}]
//过滤出及格的人的id
let ids = arr.filter((it,idx)=>it.score >= 60).map((it,idx)=>it.id)
console.log(ids);
四.查找数组的元素
列几个常用的吧
方法 | 作用 |
indexOf() | 从前往后索引,检索一个数组中是否含有指定的元素 |
includes() | 数组中是否包含指定的内容 |
find() | 找出第一个满足「指定条件返回 true」的元素,如果没找到,则返回 undefined |
findIndex() | 找出第一个满足「指定条件返回 true」的元素的index,没找到返回 -1 |
every() | 确保数组中的每个元素都满足「指定条件返回 true」,则停止遍历,此方法才返回 true |
some() | 数组中只要有一个元素满足「指定条件返回 true」,则停止遍历,此方法就返回 true |
1.indexOf()
//假如这是过滤出来的id
let ids = [12,34,76,98,66]
//查找过滤出的id中有id为76 的
let idx = ids.indexOf(76)
console.log(idx); // 返回索引2,说明有
let idxs = ids.indexOf(99)
console.log(idxs); // 返回-1,说明没找到
对字符串的查找
let str = '树上有7只猴,地上有1只猴'
let str1 = str.indexOf(7)
let str2 = str.indexOf('7')
console.log(str1,str2); // 3 3
可以看出来,字符串的indexOf()方法,对数据进行了隐式类型转换的,如果参数是数值类型,则他会把查找的数值转为字符串类型,为什么呢?因为js底层代码中字符串的indexOf()方法使用的是==进行比较判断
对数组的查找
let arr = [1,2,3,'4','5','6']
let idx = arr.indexOf(4)
let idxs = arr.indexOf('4')
console.log(idx,idxs); // -1 3
数组类型的indexOf(),是不会进行隐式类型转换的,也就是说数组的js底层是用===严格比较的
2.includes()
//过滤出的id
let ids = [12,34,76,98,66]
//查找数组中是否有id为34的元素
let str1 = ids.includes(34)
console.log(str1); // true
3.find()
let arr = [{id:1,name:'张三',score:30},{id:43,name:'里斯',score:68},{id:19,name:'王五',score:78},{id:87,name:'小明',score:90},]
let str = arr.find((it,idx)=>it.id == 43)
let str1 = arr.find((it,idx)=>it.id == 44)
console.log(str,str1); // {id: 43, name: '里斯', score: 68} 返回的是item undefined是没找到
4.findIndex()
let arr = [{id:1,name:'张三',score:30},{id:43,name:'里斯',score:68},{id:19,name:'王五',score:78},{id:87,name:'小明',score:90},]
let idx = arr.findIndex((item,index)=>item.id == 19)
let idx1 = arr.findIndex((item,index)=>item.id == 88)
console.log(idx,idx1); // 2是索引 -1是没找到
5.every()
let arr = [{id:1,name:'张三',score:30},{id:43,name:'里斯',score:68},{id:19,name:'王五',score:78},{id:87,name:'小明',score:90},]
//判断是否都及格
let str = arr.every((it,idx)=>it.score >= 60)
console.log(str); // false
6.some()
let arr = [{id:1,name:'张三',score:30},{id:43,name:'里斯',score:68},{id:19,name:'王五',score:78},{id:87,name:'小明',score:90},]
//判断是否有及格的
let str = arr.some((it,idx)=>it.score >= 60)
console.log(str); // true