从VBA到JSA:JSA数组方法介绍(建议收藏)

文摘   教育   2024-10-15 19:50   广东  
如果你一直用的是VBA,那么你来学JSA的数组,可能会直呼,真是太好用啦。因为JSA中的数组提供了丰富的数组方法用于处理数据,不像VBA什么都靠循环。但同时,你也会直呼,太难学了,知识点太多了,今天我们就来看看JSA中的数组方法介绍吧,本文较长,建议收藏
1、Join()方法
join()方法用于把数组中的所有元素转换一个字符串,默认使用逗号作为分隔符,如图,如果有需要使用其他分隔符,只需给他括号内填上参数即可

function test(){  let arr=['A','B','C']  console.log(arr.join())  console.log(arr.join('-'))}

2、push()和pop()方法

push()方法从数组末尾向数组添加元素,可以添加一个或多个元素,并返回新的长度,pop()方法用于删除数组的最后一个元素并返回删除的元素

function test2(){  let arr=['A','B','C']  let a = arr.push('D','E','F','G');  console.log(a)  console.log(arr.join())
var b = arr.pop() console.log(b) console.log(arr.join())}

注意:push返回的是添加元素后数组的长度,原数组的值也被改变,pop返回的是数组的最后一个值,同时原数组最后一个值被删除

3、unshift()和shift()方法

unshift()方法可向数组的开头添加一个或更多元素,并返回新的长度,shift()方法用于把数组的第一个元素从其中删除,并返回第一个元素的值

function test3(){  let arr=['A','B','C']  let a = arr.unshift('D','E','F','G');  console.log(a)  console.log(arr.join())
var b = arr.shift() console.log(b) console.log(arr.join())}

注意:unshift返回的是添加元素后数组的长度,原数组的值也被改变,pop返回的是数组的第一个值,同时原数组第一个值被删除

4、sort()方法

用于对数组的元素进行排序。默认情况下是将数组元素转换成字符串,然后按照ASC码进行排序,所以,如果是按默认情况,我们的Sort()方法并不能排序数字,因为他会转换为字符的形式进行比较,排序顺序可以是字母或数字,并按升序或降序,默认排序顺序为按字母升序

arrayObject.sort(sortby);

参数sortby可选。规定排序顺序,必须是函数。

function test4(){  var arr= ['a','d','c','b','c'];  console.log(arr.sort().join());  
let arr1 = [116,22,13,1,2,34,222,16,88,18,37,56,50] console.log(arr1.sort().join()) }

如上代码所示:我们的字母被正确排序,数字却会按照第一位数字,第二位数字,第三位数字,一位一位的比较,所以,数字并没有被正确排序,那么我们想要让字母正确排序怎么办呢?请看如下代码:

function test5(){  function compare(val1,val2){       if(val1 < val2){            return -1       }else if(val1 > val2){            return 1       }else{            return 0       }  }  let arr2 = [13,24,51,3,234,123,23,45,67,8]  console.log(arr2.sort(compare).join())
let arr3 = [13,24,51,3,234,123,23,45,67,8] console.log(arr3.sort((a, b) => (a - b)).join())}

如上代码所示:我们通过写一个比较两个值的自定义函数,作为Sort的调用参数进行排序,使用了两种方式创建自定义函数,在function内部写function,以及使用=>创建函数,两种方式都能实现数字排序,我只能说,知识量有点大,我看了很久,原来JS中=>可以创建函数。

5、reverse()方法

用于反转数组中元素的顺序,原数组的顺序也被改变

function test6(){  var arr1 = [13,24,51,3];  console.log(arr1.reverse().join())   console.log(arr1.join())   }

注意:反转后原数组也被改变

6、concat()方法

用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本

function test7(){  var arr1 = [1,3,5,7,'a']  var arrCopy = arr1.concat('b','c',[11,13])  console.log(arrCopy.join())  console.log(arr1.join())  }

7、slice()方法

返回从原数组中指定开始下标到结束下标之间的项组成的新数组,可以接受一或两个参数,即要返回项的起始和结束位置(不包括结束位置的项),语法如下,其中有,如果参数为负数,代表从右往左数,如果参数大于数组长度,会返回空数组

array.slice(start,end)

下面我们来看看示例代码:

function test8(){  var arr1 = [0,1,2,3,4,5,6]  var arrCopy = arr1.slice(1)  var arrCopy1 = arr1.slice(10)  var arrCopy2 = arr1.slice(1,4)  var arrCopy3 = arr1.slice(1,-2)  console.log('arr1:'+arr1.join())    console.log('arrCopy:'+arrCopy.join())   console.log('arrCopy1:'+arrCopy1.join())   console.log('arrCopy2:'+arrCopy2.join())  console.log('arrCopy3:'+arrCopy3.join())}

注意看以上结果:我们使用Slice方法后,原数组并没有被改变。

8、forEach()方法

forEach方法的参数需要是一个函数,参数中的function回调有三个参数:
第一个参数是遍历的数组内容
第二个参数是对应的数组索引
第三个参数是数组本身


function test10(){  var arr = [1,2,3,4,5,6]  var sum =0  arr.forEach(function(val,i,ar){    if(ar[i] < 5){      sum+=val}    })  console.log(sum)}

以上代码使用forEach遍历数组,将数组中小于5的数据,进行求和。前面我们了解了使用=>创建函数,下面哦我们来看看使用=>创建函数的写法:


如上图所示,只需把前面的function改为括号后的=>即可

9、map()方法

返回一个新数组,会按照原始数组元素顺序依次处理元素,他的参数与forEach一样也是一个函数

function test11(){  let arr = [1, 2, 3, 4, 5];  let Arr2= arr.map((item) => {      return item * item;  })  console.log(Arr2.join()) }

10、every()方法

判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true

function test12(){  var arr1 = [1,2,3,4,5]  var arr2 = arr1.every(x => {       return x < 10  });  console.log(arr2)

var arr3 = arr1.every(x => { return x < 3; }); console.log(arr3)}

11、splice()方法

可以实现删除、插入和替换,语法如下

array.splice(start,deleteCount,item...)

解释:splice方法从array中移除一个或多个数组,并用新的item替换它们。参数start是从数组array中移除元素的开始位置。参数deleteCount是要移除的元素的个数。

如果有额外的参数,那么item会插入到被移除元素的位置上。它返回一个包含被移除元素的数组。

function test13(){  //替换  var a=['a','b','c'];  var b=a.splice(1,1,'e','f')  console.log(a.join())  console.log(b.join())
//删除 var arr1 = [1,3,5,7,9,11]; var arrRemoved = arr1.splice(0,2); console.log(arr1.join()) console.log(arrRemoved.join())
// 添加元素 var arr1 = [22,3,31,12]; arr1.splice(1,0,12,35); console.log(arr1.join())
}

注意:二参为零则不删除任何元素,一参为参入元素的位置,三参即后续参数全都会按顺序插入到一参指定的位置

11、some()方法

判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true,跟every相反

function test14(){  var arr1 = [1,2,3,4,5]  var arr2 = arr1.some(x => {       return x < 3  })  console.log(arr2)
var arr3 = arr1.some(x => { return x < 1 }); console.log(arr3)}

13、reduce()和reduceRight()

都会实现迭代数组的所有项(即累加器),然后构建一个最终返回的值
reduce()方法从数组的第一项开始,逐个遍历到最后
reduceRight()方法从数组的最后一项开始。向前遍历到第一项
他们的回调函数有四个参数:前一个值、当前值、项的索引和数组对象

注意:回调函数后还可以写一个参数,也会参与运算

14、toLocaleString()和toString()

将数组转换为字符串

function test16(){  var arr1 = [1,2,3,4]  let str = arr1.toLocaleString()  var str2 = arr1.toString()
console.log(str) console.log(str2)}

15、find()和findIndex()

区别:
find()方法返回匹配的值
findIndex()方法返回匹配位置的索引

function test18(){  let arr = [1,2,3,4,5];  let num = arr.find((val,i,ar) => val > 3);  console.log(num)
let num1 = arr.findIndex((val,i,ar) => val > 3); console.log(num1) }

16、entries()、keys()和values()

entries()、keys()和values()--用于遍历数组。它们都返回一个遍历器对象,可以用for...of循环进行遍历

区别是keys()是对键名的遍历、values()是对键值的遍历、entries()是对键值对的遍历

function test18(){  let arr=['a','b']  let str1="",str2="",str3="",str4=""  for(let i of arr.keys()){       str1=str1+ ' '+i  }  console.log(str1)
for(let val of arr.values()){ str2=str2+ ' '+val } console.log(str2)
for(let [i,val] of arr.entries()){ str3=str3+' '+i str4=str4+' '+val }  console.log(str3 +' '+str4)}

17、indexOf()和lastIndexOf()

indexof方法可以在字符串和数组上使用。indexOf() 方法可返回某个指定的字符串值(基本数据类型)在字符串、数组中首次出现的位置。lastIndexOf():检测当前值在数组中最后一次出现的位置索引

function test19(){    let arr = ['mfg', '2017', '2016'];
console.log(arr.indexOf('mfg'))// 0 console.log(arr.indexOf('m')) // -1 console.log(arr.indexOf('2017'))// 1 console.log(arr.indexOf(2017)) // -1}

注意:需要数据类型一致才能被找到

18、includes()

用来判断一个数组、字符串是否包含一个指定的值(基本数据类型),使用===运算符来进行值比较,如果是返回true,否则false,参数有两个,第一个是(必填)需要查找的元素值,第二个是(可选)开始查找元素的位置

function test20(){  var arr1 = [22,3,31,12,58];  var includes = arr1.includes(31);  console.log(includes);   // true    var includes2 = arr1.includes(31,3);   // 从索引3开始查找31是否存在  console.log(includes2);   // false    var includes3 = arr1.includes(31,-1);   // 从最后一个开始向后查找31是否存在  console.log(includes3);   // false  }
19、filter()方法
对数组进行过滤,如下代码对数组大于一的值进行过滤筛选

function test21(){  var arr1 = [1,2,3,4]
let arr=arr1.filter((val,i,ar)=>val>1 ) console.log(arr.toString())}

好了,本期教程就到这里啦,走过路过的点个关注分享一下吧,谢谢啦,如果你是一个VBA小白,想要了解该如何开始学习VBA,建议看看以下文章

Excel VBA学习路线知识框架梳理(小白VBA入门必看-建议收藏)

求关注-求星标-求点赞-求看-求分享
最近创建了一个VBA学习交流群,如有需要进群可以添加微信 jaresfzz,或者扫描以下二维码,备注进群

Excel应用教程
主要提供Excel vba,函数,图表,数据透视表,pq,Js等教程
 最新文章