JavaScript对象:数组

第1关:数组的创建、读写和长度

任务描述

本关任务:掌握创建数组的方法,获取数组的元素和长度。

相关知识

数组的出现就是为了批量处理数据。

数组的创建

创建数组有两种方法,一是使用数组字面量,简单来说就是在[]之中列出数组的所有元素:

 
  1. var numberArray = [1,2,3,4,5];//数字数组
  2. var stringArray = ["java","script","edu","coder"];//字符串数组
  3. var mixArray = [1,2,"java",true,6.6];//混合数组

如上,各元素之间用,隔开。JavaScript中数组的元素可以是不同的数据类型,如上面的第三个数组。

创建数组的第二种方法是新建一个Array对象的实例,如:

 
  1. var myArray = new Array();//创建一个初始为空的数组
  2. var lengthMixArray = new Array(6);//创建一个长为6的数组

这种情况下可以设置数组的长度(即数组中元素的个数),也可以不设置。

数组元素的读取和写入

数组元素的读取和写入在形式上相似,都是用赋值符号连接的两个表达式。

读取时,存放读入值的变量在左边,数组元素在右边:

 
  1. var readArray = [1,3,"js",true,2.22];
  2. var read = readArray[0];//读取第一个元素到变量read中

写入时,数组元素在左边,待写值在右边:

 
  1. var writeArray = [1,3,"js",true,2.22];
  2. writeArray[0] = 2;//在第一个元素的位置写入2
  3. console.log(writeArray[0]);//原来的1已经被覆盖,输出2

数组长度

数组长度指数组中元素的个数,等于最大索引值加1,数组的length属性即数组的长度。

 
  1. var arrayLength = [1,"js",true];
  2. console.log(arrayLength.length);//输出3

数组的长度也可以写入,当写入的值小于数组的实际长度时,数组会被删除一部分。大于实际长度时,数组会在尾部添加一些空的区域。

 
  1. arrayLength.length = 2;
  2. console.log(arrayLength);//输出[1,"js"]

编程要求

本关的编程任务是补全右侧代码片段中beginend中间的代码,具体要求如下:

  • 已知两个数组array1array2,参数a是一个整数,先判断a的值与数组array1的长度值相等,如果相等,返回数组array1的最后一个元素,反之,则返回数组array2的最后一个元素;

  • 具体请参见后续测试样例。

测试说明

测试过程:

  • 平台将读取用户补全后的ArrayCreate.js

  • 调用其中的mainJs()方法,并输入若干组测试数据作为参数;

  • 接着根据测试的输出判断程序是否正确。

以下是测试样例:

测试输入: 7 预期输出: hello
 

var array1 = [1,2,3,"js",4,true,"hello"];
var array2 = [true,true,"java",2.1];
function mainJs(a) {
	//请在此处编写代码
    a = parseInt(a);
    /*********begin*********/
    if(a==array1.length){
        return "hello";
    }else{
        return 2.1 ;
    }

    /*********end*********/
}

第2关:数组元素的增减

任务描述

本关任务:掌握数组元素增减的方法。

相关知识

数组元素的增删是JavaScript的一个特点,因为其他很多编程语言的数组是不允许增加或者删除元素的。

数组元素的增加

JavaScript中,为数组增加元素可以在数组头部(索引最小处)或者尾部进行,可以使用数组的方法或者直接使用运算符。

在尾部添加元素

最直观的方法是直接给当前尾部元素的后一个位置赋值。

 
  1. var numberArray = [12,23,34,45];
  2. numberArray[numberArray.length] = 56;
  3. console.log(numberArray);//输出[12,23,34,45,56]

第二种方法是使用push()函数,往数组的末尾添加一个或多个元素,参数是要添加的元素,返回数组长度。

 
  1. //利用push()方法在数组尾部添加元素
  2. var numberArray = [12,23,34,45];
  3. var newLength = numberArray.push(56);
  4. console.log(newLength);//输出5
  5. console.log(numberArray);//输出[12,23,34,45,56]

在头部添加元素

unshift()方法在数组的头部添加元素,并返回数组新的长度,其余元素自动向索引大的方向移动。

 
  1. var sArray = ["ja","va","script"];
  2. var newLength = sArray.unshift("he","llo");
  3. console.log(newLength)//输出5
  4. console.log(sArray);//输出["he","llo","ja","va","script"];

数组元素的删除

删除也能在数组头部(索引值小)或者尾部进行。

在尾部删除元素

上一关介绍过一种方法:直接修改数组长度为更小的值。

 
  1. var array = [1,2,true,"hello"];
  2. array.length = 3;//索引最大的元素被删除
  3. console.log(array);//输出[1,2,true]

第二种方法是使用delete运算符。delete运算符后接要删除的元素,但是删除后,会有一个空占位符,所以数据的长度保持不变。如:

 
  1. var dArray = [11,22,33,44,55];
  2. delete dArray[4];//删除索引最大的元素
  3. console.log(dArray);//输出[11,22,33,44]
  4. console.log(dArray.length); //长度为5

第三种方法是使用pop(),一次删除一个,并返回被删除的元素。

 
  1. //利用pop()方法在数组尾部删除元素
  2. var numberArray = [3,4,5,6,7];
  3. var deletedNumber = numberArray.pop();
  4. console.log(deletedNumber);//输出被删除的元素7
  5. console.log(numberArray);//删除后的数组为[3,4,5,6]

在头部删除元素

unshift(),自然有shift()shift()的作用是删除数组头部一个元素并返回该元素,然后所有元素往索引值小的方向移动一位。

初学者很容易混淆这两个方法,建议记住shift单词的意思是:删除,去掉。

 
  1. var dArray = [11,22,33,44,55];
  2. console.log(dArray.shift());//输出11,11被从数组中删除
  3. console.log(dArray);//输出[22,33,44,55]

编程要求

本关的编程任务是补全右侧代码片段中beginend中间的代码,具体要求如下:

  • 将数组testArray的最后a个元素移动到最前面,这a个元素之间的相对位置不变,其余元素之间的相对位置不变;

  • 比如将数组[1,2,3,4,5]最后2个元素移动到最前面,数组变为[4,5,1,2,3]

  • 返回移动结束后数组在索引b处的元素;

  • 具体请参见后续测试样例。

测试说明

测试过程:

  • 平台将读取用户补全后的ArrayAddDelete.js

  • 调用其中的mainJs()方法,并输入若干组测试数据作为参数;

  • 接着根据测试的输出判断程序是否正确。

以下是测试样例:

测试输入: 2,0 预期输出: c#

 

var testArray = [12,"java","js","c","c++",24,36,"python","c#","css"];
function mainJs(a,b) {
    a = parseInt(a);
    b = parseInt(b);
    //请在此处编写代码
    /*********begin*********/

    for (var i=0;i<a;i++){
    testArray.unshift(testArray .pop());
    }
    return testArray[b];
    /*********end*********/
}


第3关:数组的常用方法

任务描述

本关任务:掌握数组的常用方法。

相关知识

本关将介绍一些数组常用的方法,你可以通过调用这些方法生成复杂的代码。

查找元素的位置

根据值查找元素的位置,有两个方法:indexOf()lastIndexOf(),前者从索引小处往大搜索,后者相反。都返回第一次遇到该元素时的索引。

两者都有两个参数,第一个参数为要查找的元素,第二个参数可选,为搜索的起点索引。如:

 
  1. var search = ["a","b","a","b","c","d","a","a","b","a"];
  2. console.log(search.indexOf("a"));//输出0
  3. console.log(search.lastIndexOf("a"));//输出9
  4. console.log(search.indexOf("a",2));//输出2,从索引为2处开始搜索

第二个参数可以是负数,-1表示倒数第一个元素,-2表示倒数第二个元素,依次类推。如:

 
  1. var search = ["a","b","a","b"];
  2. console.log(search.indexOf("a",-3));//输出2
  3. console.log(search.lastIndexOf("a",-3));//输出0

数组的合并

concat()实现数组合并,其形式是数组a.concat(数组b),合并之后返回新数组,新数组为数组a后面连接数组b,但是数组ab不变。

 
  1. var a = [1,2,3];
  2. var b = [4,5,6];
  3. var c = a.concat(b);//合并后返回新数组
  4. console.log(c);//输出[1,2,3,4,5,6]

数组倒置

reverse()实现数组倒置,无参数,返回倒置后的数组,同时调用该方法的数组也会被倒置。称为就地逆置。

 
  1. var a = [1,2,3,4];
  2. var b = a.reverse();
  3. console.log(a);//输出[4,3,2,1]
  4. console.log(b);//输出[4,3,2,1]

元素合并

join()将数组的所有元素连接起来组成字符串,参数为元素之间的分隔符,默认逗号。

 
  1. var sArray = ["June","July","August"];
  2. console.log(sArray.join());//输出June,July,August
  3. console.log(sArray.join("+"));//输出June+July+August

元素排序

sort()实现数据元素排序,不带该参数表示元素按照ASCII表从小到大排序。如:

 
  1. var stringArray = ["a","ab","b","aa"];
  2. stringArray.sort();
  3. console.log(stringArray);//输出["a","aa","ab","b"]

需要注意的是数字的排序,例子如下:

 
  1. var arr = [1,2,10,5,12];
  2. arr.sort();
  3. console.log(arr);//输出[1,10,12,2,5];

带参数的格式如下:

 
  1. arr.sort(function(a,b){
  2. return a-b; //升序排列
  3. })

或者:

 
  1. arr.sort(function(a,b){
  2. return b-a; //降序排列
  3. })

说明:

  • arr是要排序的数组;
  • ab是两个参数,返回a-b,升序排列,返回b-a,降序排列。

对于数字的排序,sort()带参数和不带参数是不一样的,例子如下:

 
  1. var arr = [1,2,10,5,12];
  2. arr.sort();
  3. console.log(arr);//输出[1,10,12,2,5]
  4. arr.sort(function(a,b){
  5. return a-b;
  6. });
  7. console.log(arr);//输出[1,2,5,10,12]

提取子数组

slice()返回切割出的子数组,不修改原来的数组。

它有两个整数参数aba表示切割的起点,该点属于子数组;b可选,表示切割的终点,该点不属于子数组。

ab都可以为负数,如-1表示倒数第一个位置,依次类推。

 
  1. var arr = ["a","b","c","d","e"];
  2. console.log(arr.slice(0,3));//["a","b","c"]
  3. console.log(arr.slice(0,-2));//["a","b","c"]
  4. console.log(arr.slice(4));//["e"]
  5. console.log(arr.slice(-4));//["b","c","d","e"]

编程要求

本关的编程任务是补全右侧代码片段中beginend中间的代码,具体要求如下:

  • 获取字符串a在数组myArray的所有位置并组成一个位置数组;

  • 获取字符串b在数组myArray的所有位置并组成一个位置数组;

  • 合并这两个数组然后返回合并后的数组。

测试说明

测试过程:

  • 平台将读取用户补全后的ArrayMethod.js

  • 调用其中的mainJs()方法,并输入若干组测试数据作为参数;

  • 接着根据测试的输出判断程序是否正确。

以下是测试样例:

测试输入: a,a,c,b,b 预期输出: [0,1,3,4]

 

function mainJs(myArray) {
    myArray = myArray.split(",");
    //请在此处编写代码
    /*********begin*********/
var s=0;
      var a=new Array();
      while(s<myArray.length){
       s=myArray.indexOf("a",s);
       if(s!=-1){
              a.push(s);
               s++;
              }
       else{
            break;
             }
       }
           s=0;
          var b=new Array();
       while(s<myArray.length){
           s=myArray.indexOf("b",s);
           if(s!=-1){
           b.push(s);
           s++;
             }
           else{
                break;
          }
         }
            return a.concat(b);

    /*********end*********/
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值