本篇文章给大家带来了关于JavaScript的相关知识,其中主要整理了数组操作函数的相关问题,包括了元素删除、splice、slice、concat等等内容,下面一起来看一下,希望对大家有帮助。
|
本篇文章给大家带来了关于javascript的相关知识,其中主要整理了数组操作函数的相关问题,包括了元素删除、splice、slice、concat等等内容,下面一起来看一下,希望对大家有帮助。
【相关推荐:javascript视频教程、web前端】 数组进阶上篇介绍了数组的基本概念和一些简单的数组元素操作函数,实际上,数组提供的函数还有很多。
元素删除(对象方式)上篇已经简单介绍过,数组就是一个特殊的对象,因此我们可以尝试使用对象的属性删除方法: 举个例子: let arr = [1,2,3,4,5];delete arr[2];console.log(arr); 代码执行结果如下:
注意观察图中标黄的位置,虽然元素被删除了,但是数组的长度仍然是
造成这种现象的原因是, 而在数组中,我们常常希望删除元素后,元素的位置会被后继的元素填补,数组的长度变短。 这个时候,我们就需要 splice()需要提前说明的是, arr.splice(start[,deleteCount,e1,e2,...,eN])
删除一个元素以下实例可以从数组中删除一个元素: let arr = [1,2,3,4,5]arr.splice(0,1);//删除掉第一个元素1console.log(arr) 以上代码删除数组中第一个位置的
删除多个元素删除多个元素和删除一个元素用法相同,只需要将第二个参数改为指定数量就可以了,举例如下: let arr = [1,2,3,4,5];arr.splice(0,3);//删除前三个元素console.log(arr);//[4,5] 代码执行结果如下:
截断数组如果我们只提供一个参数 let arr = [1,2,3,4,5]arr.splice(2);//删除从下标为2以及后面的所有元素console.log(arr);//[1,2] 代码执行结果:
元素替换如果我们提供了超过两个参数,那么就可以替换数组元素,举个例子: let arr = [1,2,3,4,5];arr.splice(0,2,'itm1','itm2','itm3');console.log(arr);//['itm1','itm2','itm3',3,4,5] 代码执行结果如下:
以上代码实际上执行了两步操作,首先删除从 元素插入如果我们把第二个参数(删除数量)改为 let arr = [1,2,3,4,5]arr.splice(0,0,'x','y','z')console.log(arr);//['x','y','z'1,2,3,4,5]
返回值
let arr = [1,2,3,4,5]let res = arr.splice(0,3,'x','y')console.log(arr)//['x','y',4,5]console.log(res)//[1,2,3] 代码执行结果:
负索引我们可以使用负数指示开始操作元素的位置,举个例子: let arr = [1,2,3,4,5]arr.splice(-1,1,'x','y','z')console.log(arr)//[1,2,3,4,'x','y','z'] 代码执行结果如下:
slice()
arr.slice([start],[end]) 返回一个新数组,新数组从 举例: let arr = [1,2,3,4,5]console.log(arr.slice(2,5))//[3,4,5]console.log(arr.slice(1,3))//[2,3] 代码执行结果:
let arr = [1,2,3,4,5]console.log(arr.slice(-3))//[3,4,5]console.log(arr.slice(-5,-1))//[1,2,3,4] 代码执行结果如下:
如果只为 concat()
arr.concat(e1, e2, e3) 以上代码将返回一个新的数组,新数组由 举例: let arr = [1,2,3]console.log(arr.concat([4,5],6,7,[8,9])) 代码执行结果如下:
普通的对象,即使它们看起来和对象一样,仍然会被作为一个整体插入到数组中,例如: let arr = [1,2]let obj = {1:'1',2:2}console.log(arr.concat(obj))代码执行结果:
但是,如果对象具有 let arr = [1,2]let obj = {0:'x',
1:'y',
[Symbol.isConcatSpreadable]:true,
length:2 }console.log(arr.concat(obj))代码执行结果:
forEach()遍历整个数组,为每个数组元素提供一个操作函数,语法: let arr = [1,2]arr.forEach((itm,idx,array)=>{
...})应用举例: let arr = [1,2,3,4,5]arr.forEach((itm)=>{
console.log(itm)})代码执行结果:
let arr = [1,2,3,4,5]arr.forEach((itm,idx,array)=>{
console.log(`arr[${idx}] in [${array}] is ${itm}`)})代码执行结果:
indexOf、lastIndexOf、includes类似于字符串,
举例: let arr = [1,2,3,4,5,6,"7","8","9",0,0,true,false]console.log(arr.indexOf(0))//9console.log(arr.lastIndexOf(0))//10console.log(arr.includes(10))//falseconsole.log(arr.includes(9))//false 这些方法在比较数组元素的时候使用的是 NaN的处理
let arr = [NaN,1,2,3,NaN]console.log(arr.includes(NaN))//trueconsole.log(arr.indexOf(NaN))//-1console.log(arr.lastIndexOf(NaN))//-1 产生这种结果的原因和 这些内容在前面的章节已经讲过了,遗忘的童鞋记得温故知新呀。 find、findIndex在编程过程中常常会遇到对象数组,而对象是不能直接使用 这个时候就要使用 let result = arr.find(function(itm,idx,array){
//itm数组元素
//idx元素下标
//array数组本身
//传入一个判断函数,如果该函数返回true,就返回当前对象itm})举个栗子,我们查找 let arr =[
{id:1,name:'xiaoming'},
{id:2,name:'xiaohong'},
{id:3,name:'xiaojunn'},]let xiaoming = arr.find(function(itm,idx,array){
if(itm.name == 'xiaoming')return true;})console.log(xiaoming)代码执行结果:
如果没有符合条件的对象,就会返回 以上代码还可以简化为: let xiaoming = arr.find((itm)=> itm.name == 'xiaoming') 执行效果是完全相同的。
filter
let results = arr.filter(function(itm,idx,array){
//和find的用法相同,不过会返回符合要求的对象数组
//找不到返回空数组})举个例子: let arr =[
{id:1,name:'xiaoming'},
{id:2,name:'xiaohong'},
{id:3,name:'xiaojunn'},]let res = arr.filter(function(itm,idx,array){
if(itm.name == 'xiaoming' || itm.name == 'xiaohong')return true;})console.log(res)代码执行结果:
map
语法: let arrNew = arr.map(function(itm,idx,array){
//返回新的结果})举例,返回字符串数组对应的长度数组: let arr = ['I','am','a','student']let arrNew = arr.map((itm)=>itm.length)//return itm.lengthconsole.log(arrNew)//[1,2,1,7] 代码执行结果:
sort
let arr = ['a','c','b']arr.sort()console.log(arr) 代码执行结果:
数字数组 let arr = [1,3,2]arr.sort(function(a,b){
if(a > b)return 1;
if(a < b)return -1;
return 0;})代码执行结果:
比较函数可以返回任何数值,正数表示 let arr = [1,3,2]arr.sort((a,b)=> a - b) 如果想要逆序排列只需要交换一下 let arr = [1,3,2]arr.sort((a,b)=> b - a) 字符串排序 别忘了字符串比较要使用 let arr = ['asdfas','success','failures']arr.sort((a,b)=>a.localeCompare(b)) 代码执行结果:
reverse
let arr = [1,2,3]arr.reverse()console.log(arr)//[3,2,1] 这个没啥好说的。 str.split()和arr.join()还记得字符串分割函数吗?字符串分割函数可以将字符串分割成一个字符数组: let str = 'xiaoming,xiaohong,xiaoli'let arr = str.split(',')//['xiaoming','xiaohong','xiali']
举个栗子: let arr = [1,2,3]let str = arr.join(';')console.log(str)代码执行结果:
reduce、reduceRight
语法: let res = arr.reduce(function(prev,itm,idx,array){
//prev是上一个元素调用返回的结果
//init会在第一个元素执行时充当上一个元素调用结果},[init])试想一下,如何实现一个数字组成的数组元素和呢?map是没有办法实现的,这个时候就需要使用 let arr = [1,2,3,4,5]let res = arr.reduce((sum,itm)=>sum+itm,0)console.log(res)//15 代码执行过程如下图:
Array.isArray()数组是对象的一种特例,使用 console.log(typeof {})//objectconsole.log(typeof [])//object二者都是对象,我们需要使用 console.log(Array.isArray({}))//falseconsole.log(Array.isArray([]))//truesome、every
some 对每个数组元素执行传入的方法,如果方法返回 every 对数组的每个元素执行传入的方法,如果所有元素都返回 举个例子: let arr = [1,2,3,4,5]//判断数组是否存在大于2的元素console.log(arr.some((itm)=>{
if(itm > 2)return true;}))//true//判断是否所有的元素都大于2console.log(arr.every((itm)=>{
if(itm > 2)return true;}))//falsethisArg在所有的数组方法中,除了 arr.find(func,thisArg)arr.filter(func,thisArg)arr.map(func,thisArg) 如果我们传入了 这个参数在常规情况下是没什么用处的,但是如果 举个例子: let obj = {
num : 3,
func(itm){
console.log(this)
return itm > this.num;//查找大于3的数字
}}let arr = [1,2,3,4,5,6,7]let newArr = arr.filter(obj.func,obj)console.log(newArr)代码执行结果:
这里我们可以看到, 如果我们使用对象成员方法,同时不指定 【相关推荐:javascript视频教程、web前端】 以上就是JavaScript数组操作函数总结分享的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |
