一、创建数组的方式
var arr = []; //效率更高
var arr1 = new Array(); //参数可以有一个或多个,一个为长度,多个为数组元素;
note:判断是否数组用Array.isArray(arr1); 字符串生成数组:split(“ ”);
二、深复制 vs 浅复制
1)浅复制:
只是为被复制的数组创建了新的引用, 当原引用的数组发生变化,新的引用也会感应到。
function copy() {
var arr=[10,21,32];
var arr1=arr;
arr1[2]=90;
print("arr:", arr);
}
结果为:
[10,21,90]
2)深复制: 写一个方法将原数组中每一项都拷贝到新数组中。
function deepCopy(arr1, arr2){
for(var i=0;i<arr2.length;i++){
arr1[i]=arr2[i];
}
}
var arr2=[11,12,13];
var arr1=[];
deepCopy(arr1, arr2);
arr1[2] = 90;
print("arr2 is:", arr2); //[11,12,13]
三、 存取元素:返回目标数组的某种变体
1)indexOf(): //有就返回索引,没有就返回-1.如果有多个相同的元素返回第一个的索引,lastIndexOf()返回最后一个的索引.这两个方法同样使用字符串。
2).join()和toString():都是将数组转化为字符串并用逗号隔开各元素,pirnt打印数组自动调用toString()
note:字符串转化成数组用split(‘’)
3)concat()和splice():作为参数的数组连接到调用concat()方法的后面;splice() 第一个参数是数组索引,第二个是要截取的长度;PS:splice() 还有其他用法(删除或添加元素)。
四、可变函数
1)push()和unshift()和splice()
push()在数组末尾添加元素,可以添加多个。PS:也可以用length添加。
<span style="font-family:Helvetica Neue;">var arr=[221,1];
arr.push(21,32);
print(arr); //[221,1,21,32]
arr[arr.lenght]=34;
print(arr); //[221,1,21,32,34]</span>
unshift() 在数组开头添加元素,可以添加多个。
<pre name="code" class="javascript"><span style="font-family:Helvetica Neue;">var arr=[22,14,21];
arr.unshift(90); //可以添加多个,arr.unshift[21,432,54]
print(arr); //[90,22,14,21]</span>
splice():
第一个参数为索引,从哪个元素开始;
第二个参数是要删除的个数(如果要添加,该参数为0)
如果是添加,后面几个参数是要添加的元素。
<span style="font-family:Helvetica Neue;">var arr=[32,43,56,76,87];
arr.splice(1,0,32,4,55);
print(arr); //[32,32,4,55,43,56,76,87]
arr.splice(3,4);
print(arr); //[32,32,4,87]</span>
1)reverse():反转 //只针对数组成立
2)sort ():对字符串数组,按首字母排序
PS: 对于数字类型数组来说,也按字符串来类型排序,但也有办法按数字排序,
<span style="font-family:Helvetica Neue;">function compare(num1, num2){
return num1-num2;
}
var arr=[21,43,54,76,23];
arr.sort(compare);</span>
六、迭代器方法
1)不产生新数组
1、forEach()
function square(num){
prit(num, num*num);
}
var arr=[2,3,5,6,7];
arr.foreEach(square);
2、every():返回值为布尔值每一个元素符合
<span style="font-family:Helvetica Neue;">function isEven(num){
return num/2 == 0;
}
var arr=[2,41,60];
arr.every(isEven); //false</span>
3、some():返回值为布尔值,只要有一个元素符合function isEven(num){
return num/2 == 0;
}
var arr=[2,41,60];
arr.some(isEven); //true
4、reduce():接收一个函数,返回一个值
<span style="font-family:Helvetica Neue;">function add(total, newVal){
return total + newVal;
}
var arr=[21,43,32,32,43,65];
arr.reduce(add); //数组个元素之和</span>
recuceRight()
<span style="font-family:Helvetica Neue;">function con(totalStr, newStr){
return totalStr + newStr;
}
var arr=["hello ","computer ", "and ", "you "];
arr.reduceRight(con); //you and computer hello </span>
2)产生新数组的方法
1、map()
<span style="font-family:Helvetica Neue;">function add(num){
return num+=5;
}
var arr=[32,43,21,65];
arr.map(add); //每个元素加了5</span>
function first(word){
return word[0];
}
var arr=["you","are","welcome"];
print(arr.map(first).join("")); //yaw,用join的原因是会有逗号
2、filter():与every()类似,但不返回boolean,返回符合条件的数组
<span style="font-family:Helvetica Neue;">function isEven(num){
return num/2 == 0;
}
var arr=[2,41,60];
arr.filter(isEven); //[2,60]</span>
七、二维数组
1)Array.matrix(numrow, numcol, initial); //Array.matrix(3,3,"");initial 为初始时每个元素的值
2)var arr=[[21,32,43], [21,32,53]]
八、练习
2. 将一组单词存储在一个数组中,并按正序和倒序分别显示这些单词。
function displayaBC(a, b) {return a + ","+ b;}
var abc=["hello","world","best","I am"];
abc.reduce(displayaBC); //正序
abc.reduceRight(displayaBC); // 倒序
1. 创建一个记录学生成绩的对象,提供一个添加成绩的方法,以及一个显示学生平均成绩
的方法。
function studentScore() {
this.score = [];
this.addScore = addScore;
this.average = average;
}
function addScore (studentScore) {
this.score[this.score.length] = studentScore;
}
function average() {
var avg = [];
print("score1:", this.score);
for(var i = 0; i < this.score.length; i++) {
var total=0;
for(var j = 0; j < this.score[i].length; j++){
total += this.score[i][j];
}
avg.push((total / this.score[i].length).toFixed(2));
}
return avg;
}
var score1 = new studentScore();
score1.addScore([91,92]);
score1.addScore([91,92,93]);
print("score1:"+score1.score);
print("score2 average:"+score1.average());