JavaScript系列教程(九):数组

一、数组的概念

  • Array数组是数据的有序列表;
  • 数组中的每一个值叫做元素。每一个元素都有自己的位置,这个位置叫做索引。索引是从0开始的;
  • ECMAScript数组是没有类型的;
  • ECMAScript同一个数组中可以存储不同类型的数据;
  • ECMAScript语言中数组的长度是可以动态变化的;
  • Array是ECMAScript中常用的引用类型之一;

二、数组的创建

1.字面量法

var arr = [];//创建一个空数组
var arr2 = [1,"abc",true,3.14];

2.构造函数法创建数组

var arr3 = Array();//创建了一个空数组
console.log("arr3  "+arr3.length);

var arr4 = new Array(20);//创建了一个容量为20的数组
console.log("arr4  "+arr4.length);

var arr5 = new Array(1,2,3,4);//创建了一个容量为4的数组
console.log("arr5  "+arr5.length);

三、数组元素的读写--索引法

数组的索引是从0开始,也就是说索引0代表第一个元素。

1.读取元素

var arr = [1,'abcd',true,20.5,'123'];
var a1 = arr[1];
console.log(a1);//提取数组第一个元素
console.log(arr[arr.length - 1]);//提取数组最后一个元素

//数组越界
console.log(arr[5]);//undefined

//打印数组中每一个元素
//数组的遍历
for (var i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

注:当使用索引访问不存在的元素的时候,称之为数组越界,值为undefined

2.修改元素

var arr = [1,'abcd',true,20.5,'123'];

//修改数组的某个元素
arr[0] = 10;
arr[1] = 20;
console.log(arr);

3.添加元素

var arr1 = [];

//向数组中添加元素
arr1[0] = 'abc';
console.log(arr1);
arr[5] = 'hello';
console.log(arr);

var arr2 = [];
//循环向数组中添加元素
for (var i = 0; i < 100; i++) {
    arr2[i] = i+1;
}
console.log(arr2);

注:数组中没有这个元素就是添加,有就是修改

四、获取数组的长度

数组的length属性非常有特点:他不是只读的。可以通过数组的length属性向数组的末尾扩大数组的容量,或者从数组末尾移除数组元素。

var arr = [1,2,3,4,5,6,7,8,9,10];
//1.获取数组的长度
console.log("数组的长度"+arr.length);
//2.js的数组,可以通过修改length的值,来修改数组的容量
arr.length = 8;
console.log(arr);

arr.length = 20;
console.log(arr);

五、数组常用的方法

1、arr.push(v1,v2...)
描述:向数组末尾添加一个或者多个数组元素
参数:需要添加的数组元素
返回值:数组的长度
注意:原数组改变

var arr = [1,2,3,4,5];
console.log( arr.push("abc",11,22,33) );//9
console.log(arr);//[1, 2, 3, 4, 5, "abc", 11, 22, 33]

2、arr.pop()
描述:从数组的末尾删除一个数组元素
返回值:返回删除的元素
注意:原数组改变

console.log(arr.pop() );//9
console.log(arr);//[1, 2, 3, 4, 5, "abc", 11, 22]

3、arr.unshift(v1,v2...)
描述:向数组的头部插入元素
参数:需要插入的值
返回值:数组的长度
注意:原数组改变

arr.unshift(100,200,300);
console.log(arr);//[100, 200, 300,1, 2, 3, 4, 5, "abc", 11, 22]

4、arr.shift()
描述:删除数组的第一个元素
参数:删除掉的元素
注意:原数组改变

arr.shift() 
console.log(arr);//[200, 300,1, 2, 3, 4, 5, "abc", 11, 22]

5、arr.join("+")
描述:将数组的值连接成字符串
参数:字符串
返回值:拼接成的字符串

console.log(arr.join('*'));
//200*300*1*2*3*4*5*abc*11*22

6、arr.reverse()
描述:将数组的数组元素倒置
返回值:返回原来的数组
注意:元数组改变

console.log( arr.reverse() );
//[22, 11, "abc", 5, 4, 3, 2, 1, 300, 200]

7、arr.concat(v1,v2,v3...)
描述:创建一个新数组,新数组的元素是arr数组的全部元素,再加上参数中的元素
参数:可以使数组元素,也可以使数组
返回值:新数组

console.log( arr.concat(true,false,["aa","bb"]) );
console.log(arr);//[22, 11, "abc", 5, 4, 3, 2, 1, 300, 200, true, false, "aa", "bb"]

8、arr.slice(start,end)
描述:返回数组中一部分
参数:开始的位置,结束的位置
返回值:数组的一部分
注意:start的值必须大于1并且不能小于end的值

console.log( arr.slice(0,58) );
console.log(arr);//[22, 11, "abc", 5, 4, 3, 2, 1, 300, 200]

9、arr.splice(index,howmany,v1,v2...)
描述:向数组中添加元素或者从数组中删除元素
参数:index--必需,规定添加或者删除元素的地方。赋值表示从数组末尾开始
howmany--必需,要删除项目的个数,如果值为0,则不会删除元素
v1--可选,向数组中添加新的项目
返回值:改变之后的数组

var arr2 = [0.1,0.2,0.3];
//1.向0.2之前添加一个0.05
arr2.splice(1,0,0.05);
console.log(arr2);
//[0.1, 0.05, 0.2, 0.3]
//2.删除掉0.05
arr2.splice(1,1,"abc","abd","cbd");
console.log(arr2);
//[0.1, "abc", "abd", "cbd", 0.2, 0.3]
//3.删除多个数组元素
arr2.splice(1,3);
console.log(arr2);
//[0.1, 0.2, 0.3]

10、indexOf(v1) 
          描述:从数组头部查找v1,找到的话返回索引
          参数:要查找的数值
          返回值:索引,没有找到返回-1

var arr3 = [100,200,200,300,200,400,500,100,200];
console.log( arr3.indexOf(200));//1

11、lastIndexOf(v2) 
          描述:从数组尾部查找v1,找到的话返回索引
          参数:要查找的数值
          返回值:索引,没有找到返回-1

var arr3 = [100,200,200,300,200,400,500,100,200];
console.log( arr3.lastIndexOf(200) );//8

六、排序

冒泡排序 (Bubble Sort)

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一轮,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
<script>
    //数组中有10个元素都是数字,从小到大排序
    var arr = [2,4,3,6,2];
    
    
    /*
        冒泡排序:
            比较相邻的两个元素,把大的值放在后面
            
     *  原数组:2 4 3 6 1
     *       第一层循环: 遍历数组
     *          第一次:
     *              第二层循环:
     *                  第一次:2 4 ----不动                 2 4 3 6 1
     *                  第二次:4 3 ---- 3和4交换位置 2 3 4 6 1
     *                  第三次:4 6 ---- 不动                2 3 4 6 1
     *                  第四次:6 1 ---- 6和1交换位置 2 3 4 1 6
     *              第二次:
     *              第二层循环:
     *                  第一次:2 3 ---- 不动                 2 3 4 1 6
     *                  第二次:  3 4 ---- 不动        2 3 4 1 6
     *                  第三次:  4 1 ---- 4和1交换位置  2 3 1 4 6
     *                  第四次:不需要
     *          第三次:
     *              第二层循环:
     *                  第一次:2 3 ---- 不动                 2 3 1 4 6
     *                  第二次:3 1 ---- 3和1交换位置  2 1 3 4 6
     *                  第三次:不需要
     *          第四次:
     *              第二层循环;
     *                  第一次:2 1 --- 2和1交换位置    1 2 3 4 6
     *                  第二次:不需要
     * */
    
    //第一层循环
    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 tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
    console.log(arr);
</script>

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

//数组中有10个元素都是数字,从小到大排序
    var arr = [2,4,3,6,1];
    /*
        选择排序:
                每一个元素和后面所有的元素比较,把最小的放在前面
            
     *  原数组:2 4 3 6 1
     *       第一层循环: 遍历数组
     *          第一次:arr[0] = 2
     *              第二层循环:
     *                  第一次:2 4 ---- 不动
     *                  第二次:2 3 ---- 不动
     *                  第三次:2 6 ----- 不动
     *                  第四次:2 1 ----- 2 和1交换位置  1 4 3 6 2
     *          第二次:arr[1] = 4
     *              第二层循环:
     *                  第一次:4 3 --- 4 和3交换位置  1 3 4 6 2
     *                  第二次:3 6 ---- 不动
     *                  第三次:3 2 ---- 3和2交换位置 1 2 4 6 3
     *                  
     *          第三次:arr[2] = 4  
     *              第二层循环:
     *                  第一次:4 6 ---- 不动
     *                  第二次:4 3 ---- 4和3交换位置 1 2 3 6 4
     *          第四次:arr[3] = 6
     *              第二层循环:
     *                  第一次:6 4 --- 6和4交换位置 1 2 3 4 6
     *              
     * */
    //第一层循环
    for (var i = 0; i < arr.length - 1; i++) {
        
        //第二层循环 
        for (var j = i + 1; j < arr.length; j++) {
            //1 --- 5
            //当前第一层循环的元素arr[i]和后面的每一个元素比较
            if(arr[i] > arr[j]){
                //如果比后面的值大,交换两个元素的值,小值在前面
                var tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
    }
</script>

转载于:https://www.cnblogs.com/codingplayer/p/7260812.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值