Educoder JS学习笔记5:JS数组

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

任务描述

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

过关帮助

数组的创建

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

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

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

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

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

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

数组元素的读取和写入

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

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

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

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

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

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

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

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

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

编程内容

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

第2关:数组元素的增减

任务描述

将数组testArray的最后a个元素移动到最前面,这a个元素之间的相对位置不变,其余元素之间的相对位置不变;
比如将数组[1,2,3,4,5]最后2个元素移动到最前面,数组变为[4,5,1,2,3];
返回移动结束后数组在索引b处的元素。

过关帮助

数组元素的增加

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

在尾部添加元素

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

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

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

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

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

var sArray = ["ja","va","script"];
var newLength = sArray.unshift("he","llo");
console.log(newLength)//输出5
console.log(sArray);//输出["he","llo","ja","va","script"];
数组元素的删除

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

在尾部删除元素

直接修改数组长度为更小的值。

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

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

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

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

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

有unshift(),自然有shift(),shift()的作用是删除数组头部一个元素并返回该元素,然后所有元素往索引值小的方向移动一位。
建议记住shift单词的意思是:删除,去掉。

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

编程内容

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关:数组的遍历和多维数组

任务描述

将一维数组arr转为a行b列的二维数组,行优先;
返回该二维数组。

编程内容

var arr = [1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15,16,17,18,19,20,21,23,22];
function mainJs(a,b) {
    a = parseInt(a);
    b = parseInt(b);
    //请在此处编写代码
    /*********begin*********/
    var arr1 = new Array(a);
    for(var i = 0;i < a;i++){
        arr1[i] = new Array(b);
    }
    var count = 0;
    for(var i = 0;i < a;i++){
        for(var j = 0;j < b;j++){
            arr1[i][j] = arr[count++];
        }
    }
    return arr1;
    /*********end*********/
}

第4关:数组的常用方法

任务描述

获取字符串a在数组myArray的所有位置并组成一个位置数组;
获取字符串b在数组myArray的所有位置并组成一个位置数组;
合并这两个数组然后返回合并后的数组。

编程内容

function mainJs(myArray) {
    myArray = myArray.split(",");
    //请在此处编写代码
    /*********begin*********/
    var a = new Array();
    var i = 0,j = 0;
    while(myArray.indexOf("a",i) != -1)
    {
        a[j] = myArray.indexOf("a",i);
        i = a[j] + 1;
        j++;
    }
    var b = new Array();
    var i1 = 0,j1 = 0;
    while(myArray.indexOf("b",i1) != -1)
    {
        b[j1] = myArray.indexOf("b",i1);
        i1 = b[j1] + 1;
        j1++;
    }
    var d = a.concat(b);
    return d;
    /*********end*********/
}

第5关:数组的应用——内排序

任务描述

函数mainJs(a)中的变量arr是一个数组,你需要对该数组进行选择排序;
返回选择排序进行过程中,在每一趟交换前,待排序子数组的最大元素的位置组成的数组;
比如对于上面相关知识中的数组[9,5,8,0,2,6],第一次交换前,最大的元素9的索引是0,第二次交换前,最大元素8的索引是2,第三次交换前最大元素6的索引是0,第四次交换前最大元素5的索引是1,第五次交换前最大元素2的索引是1,第六次交换前最大元素0的索引是0。索引需要返回的数组是[0,2,0,1,1,0]。

编程内容

function mainJs(a) {
    var arr = a.split(",");
    for(var i = 0;i < arr.length;i++) {
        arr[i] = parseInt(arr[i]);
    }
    //请在此处编写代码
    /*********begin*********/
    var mi = new Array(); 
    var aLength = arr.length;
    var temp;
    var max = arr[0];
    var maxIndex = 0;
    for(var i = 0;i < aLength - 1;i++) {
        for(var j = 1;j < aLength - i;j++) {
            if(arr[j] > max) {
                max = arr[j];
                maxIndex = j;
            }
        }
        mi[i] = maxIndex;
        temp = arr[aLength-i-1];
        arr[aLength - i - 1] = arr[maxIndex];
        arr[maxIndex] = temp;
        var max = arr[0];
        var maxIndex = 0;
    }
    return mi;
    /*********end*********/
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。