与其他语言数组的差异
相对其他语言数组的严格性,javascript的数组就显得有点不正经了。比如:
1:数组里存放的数据不一定是同一类型的数据,想存什么就存什么:
let arr1=[1,"23",undefined,true,{name:"迪丽热巴"},function(){ return true}]
2: 数组的length属性会动态调整,访问数组索引不存在的不会报错:而是返回undefiend(由此下个结论,数组是对象:访问不存在的对象会返回undefined)
let arr2=[1,2,3]
console.log("访问不存在的索引",arr2[3])
3:扩展数组的length属性增加数组的长度,拓展的数组元素都是undefined
常见的数组操作方法
第一类:前尾增/删
push():末尾添加
pop():数组末尾删除
unshift():数组开头添加
shift():数组开头删除
这里有个性能提升tip:
push和pop只会影响最后面的元素,而shift和unshift会一个元素之后的索引都要调整,非特殊情况不建议使用。
第二类:遍历数组,也叫数组迭代
1.forEach(item, index, arr ) 本质与for循环一样的。
item : 必需。当前元素
index:可选。当前元素的索引值。
arr:可选。当前元素所属的数组对象。
2.every():对数组的每一项运行给定函数,如果该函数对每一项都返回true,则结果返回true。
3.some():对数组的每一项运行给定函数,如果该函数只要有一个都返回true,则结果返回true。
4.filter():对数组的每一项运行给定函数.返回该函数会返回true的结果组成的数组。
let arr10=[1,2,3,5,6,3,2,4,1]
let arr10Filter=arr10.filter((item,index,arr)=>{
return (item>2)
})
console.log(arr10Filter); 输出: [3,5,6,3,4]
5.map():对数组的每一项运行给定函数,返回每次函数调用的结果组成的数组。 此方法会映射出一个新的数组,与之前数组没有半毛钱关系了。
let arr11=[1,2,3,4,5,6,7,88,90]
let arr11Map=arr11.map((item,index,arr)=>{
return item*3
})
console.log(arr11Map); 输出: [3,6,9,12,15,18,21,264,270]
第三类:位置方法(返回的对应索引且只返回第一个找到的索引,找不到则返回-1)
1:indexOf():从前往后寻找
let arr12=[11,1,2,4,5,6,7,4]
let isExist= arr12.indexOf(4)
console.log(isExist) 输出:3
2:lastIndexOf():从后往前寻找
let arr13=[11,1,2,4,5,6,7,4]
let isExist= arr13.lastIndexOf(4)
console.log(isExist) 输出:7
第四类方法:重排序
1:reverse() 翻转(不是排序,最后的放在最前面,以数组的(length-1)/2索引为中心轴翻转)
let arr14=[2,3,1,45,5]
arr14.reverse()
console.log(arr14) 输出: [5, 45, 1, 3, 2]
2.sort() 排序
let arr15=[0,1,20,4,5,10,15]
升序,从小到大
arr15.sort((a,b)=>{
return a-b 如果是降序:这里变为b-a
}
)
console.log(arr15) 输出:[0, 1, 4, 5, 10, 15, 20]
第五类:操作方法
1.concat() 方法可以基于当前数组中的所有项创建一个新数组。最后返回新构建的数组。在没有给concat() 方法传递参数的情况下,它只是复制当前数组并返回副本。
var arr16 = ['apple','banana','orange']
var arr17 = arr16.concat('lalala',['1111','2222'])
console.log(arr16);
console.log(arr17);
// 结果
// ['apple', 'banana', 'orange']
// ['apple', 'banana', 'orange', 'lalala', '1111', '2222']
2.slice() 截取方法,他能够基于当前数组中的一项或者多个项创建一个新数组。在只有一个参数的情况下,slice() 方法返回从该参数指定位置开始到数组末尾的所有项。如果两个参数,该方法返回起始和结束位置之间的项,但不包括结束位置的项。
注意:slice()不会影响原数组。
var arr18 = ['a','b','c','d','e']
var arr19 = arr18.slice(2)
var arr20 = arr18.slice(2,4)
// 结果
// ['c', 'd', 'e']
// ['c', 'd']
3.splice()
在数组任意位置添加和删除 (删除的话返回值是被删组成的数组集合)
删除:
array.splice(从那个索引开始,,删除几个)
let arr3=[1,2,3,4,5,6]
arr3.splice(2,2)
console.log("删除之后还剩下什么"、,arr3);
第二个参数不写,默认从指定索引删到最后:
let arr4=[1,2,3,4,5,6]
arr4.splice(2)
console.log("第二个参数不要",arr4)
添加用法(添加的话就返回空数组[ ],毕竟没有删除)
array.splice(哪个索引开始加,0,item1,......itemX)
let arr5=[1,2,5,6,7]
arr5.splice(2,0,3,4)
console.log("添加",arr5)
第六类 :其他
1.join()用于把数组中的所有元素转换一个字符串。元素是通过指定的分隔符进行分隔的。
let arr21=["迪丽热巴","喜欢一个","来自南宁的","小伙子","他叫橙子"]
let arr21Join= arr21.join("---")
console.log(arr21Join) //输出 迪丽热巴---喜欢一个---来自南宁的---小伙子---他叫橙子
console.log(typeof(arr21Join) ) // string