JavaScript之数组

目录

数组1

创建数组2

访问数组2

遍历数组3

数组分类3

数组方法4

应用1

数组属性1

排序算法1

1. 函数的值传递和引用传递(堆和栈及索引思维)1

对象的两种创建方式1

应用:1

综合应用:1

数组

定义:数组是一个可以存储一组或一系列相关数据的容器。

为什么要使用数组?

   1:为了解决大量相关数据的存储和使用的问题。

   2:模拟真实的世界(班级、军队)

创建数组

1:通过构造函数的方式来创建。 var a = new Array();

  1.直接赋值

   var a=new Array(数据1,数据2,…);

   --------------------------------------------------------------

   var a=new Array(数值)

       如果括号中只有一个元素,并且这个元素是数值类型的,那么他就是指定数组的长度。 并且它的值都是undefined

      数组的属性:length 属性 (获取整个数组的长度)。

  2.声明以后再赋值

var a=new  Array(); a[0]=1;  a[1]=2;  a[2]=3;

2JSON方式创建数组 var a=[];

1.直接赋值:

      var a=[1,2,3,4];

2.声明以后再赋值:

      var a=[]; a[0]=1;  a[1]=2;  a[2]=3;

JS数组可以存储任何类型的值。

访问数组

通过数组的(中括号)下标访问。

数组下标从0开始,他的最大值,是length-1。有8个元素的话,则长度是8,如果要访问最后一个元素,则访问7。因为下标从0开始,01234567

数组的操作

arr.push(数组元素......) 参数之间要用逗号隔开。

    向数组的末尾添加新的元素,返回值是新数组的长度。

    可以一次添加多个元素。

arr.pop()

    删除数组的最后一个元素,返回删除的元素

arr.unshift(数组元素.....)

    向数组的开头加入新的元素,返回值是新数组的长度。

    可以一次添加多个元素arr.shift()

删除数组的第一个元素,返回删除的元素

遍历数组

1for循环。

2while循环。

3for in循环。

for in的作用:

1:用于数组的遍历。

2:用于对象属性的遍历。

数组分类

整数数组/字符串数组/对象数组/二维数组

按照维度来分类

     1.一维数组

     2.二维数组

     声明二维数组:

var arr=[ [1,2,3], [4,5,6]];    alert(arr[1][1]);

//5

应用

1山上有一口缸可以装50升水,现在有15升水。老和尚叫小和尚下山挑水,每次可以挑5升。问:小和尚要挑几次水才可以把水缸挑满?通过编程解决这个问题。

2定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;

然后按顺序每五个数求出一个平均值,

放在另一个数组中并输出。试编程。

3通过循环按行顺序为一个5×5的二维数组a125的自然数,然后输出该数组的左下半三角。试编程。

排序算法

1:冒泡排序

5,1,3,2,4

1,5,3,2,4

1,3,5,2,4

1,3,2,5,4

1,3,2,    4,            5

           1,       ,2,                  3                 4,                     5

思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。

即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

function bubbleSort (arr) {

    // 控制冒泡的
    for (var i = 0;i<arr.length-1;i++) {

        // 控制每轮冒出一个数需要比较的次数
        for (var j = 0; j < arr.length-1-i; j++) {
            if (arr[j] > arr[j+1]) {
                var temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
       }
    }
    return arr;
}

2选择排序

思路分析:选择排序和冒泡排序类似,也是依次对相邻的数进行两两比较。不同之处在于,它不是每比较一次就调换位置,而是一轮比较完毕,找到最大值(或者最小值)之后,将其放在正确的位置,其他数的位置不变。

1,5,3,2,4

1,  5,3,2,4  //1

1,2    5,3,4 //2

1,2,3   5,4//3

1,2,3,4  5 //4

1,2,3,4,5 //5

function selectionSort(arr){

var len = arr.length,min;

for (i=0; i < len; i++){

// 将当前位置设为最小值

min = i;

// 检查数组其余部分是否更小

for (j=i+1; j < len; j++){

if (arr[j] < arr[min]){

min = j;

}

}

// 如果当前位置不是最小值,将其换为最小值

if (i != min){

var temp = arr[i];

arr[i] = arr[min];    

arr[min] = temp;

}

} return arr;

}

1. 函数的值传递和引用传递

1:值传递

定义:调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

2:引用传递

定义:调用函数时将实际参数的地址传递到函数中,这样在函数中如果对参数所进行的修改,将影响到实际参数。

堆和栈及索引思维

栈(stack)和堆(heap)

栈为自动分配的内存空间;而堆 则是动态分配的内存。

基本类型和引用类型

  基本类型:存放在栈内存中的简单数据段,数据大小确定,内存空间大小可以分配。

  5种基本数据类型有Undefined、Null、Boolean、Number 和 String,它们是直接按值存放的,所以可以直接访问。

  引用类型:存放在堆内存中的对象,变量实际保存的是一个指针,这个指针指向另一个位置。每个空间大小不一样,要根据情况开进行特定的分配。

  当我们需要访问引用类型(如对象,数组,函数等)的值时,首先从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据。

对象的两种创建方式 

1.构造函数 创建对象

2.JSON形式创建对象 {name’zhangsan’}  或者 {‘name’’zhangsan’}

随机点名程序

现有数组存在学生姓名 var arr = [‘zhangsan’,’lisi’] ,使用Math.random() 实现

应用:

1数组的冒泡排序

2数组的选择排序

3编写函数map(arr) 把数组中的每一位数字都增加30%

4编写函数has(arr , 60) 判断数组中是否存在60这个元素,返回布尔类型。

5.随机生成一个五位以内的数,然后输出该数共有多少位,每位分别是什么

综合应用:

1编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组12,2,3,4,5

2有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

3使用JSON形式创建一个对象,该对象存储一个学生的信息,该对象包含学号、身份证、年龄、性别、所学专业等属性信息,

同时该对象包含一个自我介绍的方法,用来输出该对象的所有信息

4以下是某班级一次考试的成绩表。请计算总成绩,并按总成绩排名。统计各单科成绩第一名,输出其成绩与学号。

原文地址:https://www.cnblogs.com/huangzhenhui/p/7544685.html