一、创建数组方法和数组的读取、修改、写入
数组是值的有序集合,其中的值叫作元素。每个元素有一个数值表示的位置,叫作索引,数组中的不同元素可以是不同数据类型。
function demo(){
var arr1=[99,"人","abc",[3,4,5]];
var arr2=[1+1,1>0,"abc"+"123"];
var arr3=[];
var s=JSON.stringify(arr1);//可以看到数组所有值
}
扩展操作符
扩展操作符(…)只能用在数组字面量和一些指定的函数中。扩展操作符可用于任何可迭代对象。
1.展开数组
var arr1=[1,…[45,3,2],100]
var arr2=[…“12232abcba”]
2.解构赋值
var [name,sex,…socre]=[“lily”,“女”,89,96,120]
3.复制数组
var arr3=[9,5,2,7]
var arr4=[…arr3]
Array()构造函数
1.Array()函数构造数组
var arr1=new Array() //创建空数组
var arr2=new Array(3) //创建空数组,指定数组元素个数
var arr3=new Array("3") //创建有1个元素的数组
var arr4=new Array(1,2,5) //创建有3个元素的数组
var arr5=Array.of(3) //创建有1个元素类型为数字的数组
2.构造数组时的数组处理
var arr6=Array.from([..."abc123"]) //将可迭代对象转换为数组
var arr7=Array.from(["Lucass","Lily","Bob"],(v)=>v+"-"+v.length)//对数组的迭代处理
function demo(){
var arr1=new Array();
var arr2=new Array(3);
var arr3=new Array(3,4,5,"a");
var arr4=Array.of(3);
var arr5=Array.from([1,2,6,34],(n)=>n*10);
//等同于var arr5=Array.from([1,2,6,34],function(n){return n*10})
var arr7=Array.from(["Lucass","Lily","Bob"],(v)=>v+"-"+v.length)
}
获取单元格区域
如果读取两个连续及以上的单元格,则可以返回一个二维数组。如果读取的是单行单列则可以将二维数组转换为一维数组
var arr1=Range("a2:a5").Value();//读取单列
var arr1_1=Array.from(arr1,(n)=>n[0]);//单列,转换为一维数组
var arr2=Range("a2:c2").Value();//读取单行
var arr2_1=arr2[0];//单行,转换为一维数组
var arr3=Range("a2:c5").Value();//二维数组
function demo(){
var ar1=Range("a2:a5").Value;//对象
var arr1=Range("a2:a5").Value();//数组
var arr=Array.from(Range("a2:a5").Value(),(v)=>v[0])//单列转一维数组
Console.log(JSON.stringify(arr1));
Console.log(JSON.stringify(arr));
var arr2=Range("a2:c2").Value()[0];//单行转一维数组
Console.log(JSON.stringify(arr2));
var arr3=Range("a2:c5").Value();
Console.log(JSON.stringify(arr3));
}
数组的读取、修改、写入
var arr1=[543,33,99,100];
var arr2=[["Bob",89],["Lucass",80],["Frank",100]];
Console.log(arr1[2]); //读取一维数组的单个值
Console.log(arr2[1][0]); //读取二维数组的单个值
arr1[2]=8888; //修改
arr2[1][0]="ZengXianzhi"; //修改
Range("a1:d1").Value2=arr1; //向单行写入一维数组
Range("a3:a5").Value2=[["北京"],[9000],[30]];//向单列写入二维数组
Range("a7:b9").Value2=arr2; //向多行多列写入二维数组
二、数组元素的添加和删除
push和pop(堆栈:后进先出)
function demo(){
var arr=[122,2,6,99,10];
arr.push(1000,300,600,900,[10,3]);
var a=arr.pop();
//每次只能删除一个,从后面删除,而且删除是从原数组删除,并不是新建一个数组
var b=arr.pop();
var c=arr.pop();
}
unshift和shift(队列:先进先出)
function demo(){
var arr=["aa","bb","cc","dd","ee"];
arr.push(100);
arr.shift();
arr.push(200);
arr.shift();
arr.push(300);
arr.shift();
arr.unshift(12,120,[1,2,3]);
var a=arr.shift();
var b=arr.shift();
arr.unshift(120);
}
splice(添加、删除、替换)
var arr=["a","b","c"]
arr.splice(0,0,"Start"); //在前面插入元素
arr.splice(arr.length,0,"End"); //在后面插入元素
arr.splice(2,0,"Mid"); //在中间插入元素
arr.splice(0,1); //删除前面元素
arr.splice(-1,1); //删除前面元素
arr.splice(1,1); //删除中间元素
arr.splice(1,1,"B") //替换数组元素
应用
筛选二维数组
要求:筛选出年龄大于等于30的记录。
function 筛选(){
let arr=Range("a2:d7").Value();
let arr_new=[["姓名","性别","年龄","籍贯"]]
for (let ar of arr){
if (ar[2]>=30){
arr_new.push(ar);
}
}
Range("f1:i99").ClearContents();
Range("f1").Resize(arr_new.length,4).Value2=arr_new;
}
筛选成绩大于90的记录
function 筛选出成绩大于90的记录(){
Range("f2:i"+Rows.Count).ClearContents();
let intnum = 2;
var arr = Range("a2",Range("d"+Cells.Rows.Count).End(xlUp)).Value();
arr_length=arr.length;
var brr =[];
var crr =[];
for(let i = 0;i<=arr_length-1;i++){
if(arr[i][1]>=90){
brr.push([arr[i][0],arr[i][1]]);
}
if(arr[i][3]>=90){
crr.push([arr[i][2],arr[i][3]]);
}
}
Range("f2").Resize(brr.length,2).Value2 = brr;
Range("h2").Resize(crr.length,2).Value2 = crr;
}
斐波那契数列
斐波那契数列,又称黄金分割数列,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89… 这个数列从第3项开始,每一项都等于前两项之和。
function demo(){
var arr=[0,1]
for (let n=1;n<10;n++){
var v1=arr.pop();
var v2=arr.pop();
var v3=v1+v2;
arr.push(v2,v1,v3);
}
}
function 斐波那契数列(){
var ar =[1,1];
for(let i