JS基础回顾(二)--数组

一、创建数组的方式

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

三、 存取元素:返回目标数组的某种变体

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添加

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]

unshift() 在数组开头添加元素,可以添加多个。

var arr=[22,14,21];
arr.unshift(90);  //可以添加多个,arr.unshift[21,432,54]
print(arr); //[90,22,14,21]

 
  
splice():
第一个参数为索引,从哪个元素开始;
第二个参数是要删除的个数(如果要添加,该参数为0)
如果是添加,后面几个参数是要添加的元素。 
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]

五、排序
1)reverse():反转  //只针对数组成立
2)sort ():对字符串数组,按首字母排序  
PS: 对于数字类型数组来说,也按字符串来类型排序,但也有办法按数字排序,
function compare(num1, num2){
  return num1-num2;
}
var arr=[21,43,54,76,23];
arr.sort(compare);
六、迭代器方法
1)不产生新数组
      1、forEach()
function square(num){
  prit(num, num*num);
}
var arr=[2,3,5,6,7];
arr.foreEach(square);
2、every():返回值为布尔值每一个元素符合
function isEven(num){
  return num/2 == 0;
}

var arr=[2,41,60];
arr.every(isEven); //false
3、some():返回值为布尔值,只要有一个元素符合
function isEven(num){
  return num/2 == 0;
}

var arr=[2,41,60];
arr.some(isEven); //true
4、reduce():接收一个函数,返回一个值
function add(total, newVal){
  return total + newVal; 
}

var arr=[21,43,32,32,43,65];
arr.reduce(add);  //数组个元素之和
       recuceRight()
function con(totalStr, newStr){
   return totalStr + newStr;
}

var arr=["hello ","computer ", "and ", "you "];
arr.reduceRight(con);  //you and computer hello 

2)产生新数组的方法
1、map()
function add(num){
  return num+=5;
}
var arr=[32,43,21,65];
arr.map(add); //每个元素加了5
function first(word){
  return word[0];
}
var arr=["you","are","welcome"];
print(arr.map(first).join("")); //yaw,用join的原因是会有逗号

2、filter():与every()类似,但不返回boolean,返回符合条件的数组
function isEven(num){
  return num/2 == 0;
}

var arr=[2,41,60];
arr.filter(isEven); //[2,60]
七、二维数组
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());




你可能感兴趣的:(原创)