数组

8,749 阅读2分钟

数组的概念

数组是一种数据类型,可以存储多个变量。

数据在内存中存储的方式

1.内置基本类型
 只有一块栈空间, 存储的是数据。
​
2.引用类型
 引用类型有两块存储空间,一块堆空间,存储的是真正的数据。
 一块栈空间,存储的是堆空间的地址。
​
---------------------------------
数组定义的方式:
 1.构造方法
 注意:所有的引用类型都必须使用new开辟空间
 new是在堆上开辟空间的关键字
 Array是在内存开辟空间的模板
 new Array(1, 2, 3, 4, 5)返回的是堆空间的地址
 new只能和构造函数连用,不能单独使用
 var arr = new Array(1, 2, 3, 4, 5);
 console.log(arr);
​
 2.字面量:用[]括起来的数据集合,每两个数据用逗号分开
    var arr = [1, 2, 3, 4]; //系统帮你new
    console.log(arr);

数组元素的访问

数组存储的变量,称为数组的元素。
如何访问数组的元素
数组名[下标]
下标是元素的索引
注意事项:1.从零开始
        2.下标必须为自然数
        3.每两个索引之间相差1
        4.下标可以为变量
        5.下标千万不要越界  0~数组长度长度-1

遍历

数组的遍历: 对数组的所有元素做相同的操作.
            依赖于循环实现
数组元素的个数也称为长度
数组对象.length:数组的长度
遍历打印
    console.log(arr[0]);
    console.log(arr[1]);
    console.log(arr[2]);
    for (var i = 0; i < arr.length; i++) {
        console.log(arr[i]);
    }
遍历追加且打印
    arr[0] += "嘤嘤嘤";
    arr[1] += "嘤嘤嘤";
    for (var i = 0; i < arr.length; i++) {
        arr[i] += "钟薛糕";
        console.log(arr[i]);
    }

数组逆序

var arr = [6, 5, 7, 4, 8, 3, 2, 9, 1, 0];
程序 = 算法 + 语法;
 var n = arr.length;
交换时的中间变量
 var t = 0;
 for (var i = 0; i < n / 2; i++) {
     t = arr[i];
     arr[i] = arr[n - i - 1];
     arr[n - i - 1] = t;
 }
function reverse(arr) {
    var n = a.length;
    交换时的中间变量
    var t = 0;
    for (var i = 0; i < n / 2; i++) {
        t = arr[i];
        arr[i] = arr[n - i - 1];
        arr[n - i - 1] = t;
    }
}
reverse(arr);
console.log(arr);

数组的常见函数(API),JS中万物皆为对象,

对象+点运算符就可以访问该对象的相关属性和方法。
学习API的方法
耐心的读文档
​
我们要使用别人创建的函数
如何使用?
1.研究函数的功能
2.研究参数
3.研究返回值
返回值 = 函数名(参数1,参数2。。。)
4.研究demo
​
push
    功能: 尾插
    参数:push(x1,[x2,x3...]);
    返回值:新数组的长度
    var arr = ["大义灭亲", "印度巨蜥", "五一放假"];
    var len = arr.push("鸡你太美", "迪丽热巴");
    console.log(arr);
    console.log(len);
​
pop
    功能: 尾删
    参数: 无
    返回值: 被删除的元素
    var arr = ["大义灭亲", "印度巨蜥", "五一放假"];
    var x = arr.pop();
    console.log(arr);
    console.log(x);
​
unshift
    功能:头插
    参数:unshift(x1,[x2,x3...]);
    返回值:新数组的长度
    var arr = [6, 5, 7, 4, 8, 3, 2];
    var x = arr.unshift(0);
    console.log(arr);
    console.log(x);
​
shift 
    功能:头删
    参数:无
    返回值:被删除的元素
​
    var arr = [6, 5, 7, 4, 8, 3, 2];
    arr.shift();
    var x = arr.shift();
    console.log(arr);
    console.log(x);
​
    var arr = [6, 5, 7, 4, 8, 3, 2];
​
    arr.push(11, 22); //6, 5, 7, 4, 8, 3, 2, 11,22
    arr.pop(); //6, 5, 7, 4, 8, 3, 2, 11
    arr.shift(); //5, 7, 4, 8, 3, 2, 11
    arr.unshift(33, 44); //33,44,5, 7, 4, 8, 3, 2, 11
​
    console.log(arr);
​
reverse
    功能:逆序,直接改变原数组
    参数:无
    返回值:无
​
    var arr = [6, 5, 7, 4, 8, 3, 2];
    arr.reverse();
    console.log(arr);
​
splice
    功能:删除数组的某个区间,且可以用新数据代替,并返回被删除的数据,改变原数组
    参数:splice(起始位置,偏移量,[x1,x2,x3....])  偏移量只一共几个元素
    返回值:被删除的元素
​
    var arr = [6, 5, 7, 4, 8, 3, 2];
    var arr1 = arr.splice(1, 3, "heihei", "haha");
    arr.splice(3, 1);//常用于指定位置删除
    console.log(arr);
    console.log(arr1);
​
slice
    功能:数组区间的截取,返回被截取的字符串,元素数组不变
    参数:slice(起始位置,结束为止) 左闭右开  [2,5)
    返回值:被截取的元素
​
    var arr = [6, 5, 4, 7, 8, 3, 9, 2];
    var arr1 = arr.slice(2, 5);
    console.log(arr1);
​
concat
    功能:数组的拼接,不会改变原数组
    参数:concat(数组)
    返回值:新数组
​
     var arr1 = [6, 5, 4, 7];
     var arr2 = [8, 3, 9, 2];
     var arr3 = arr1.concat(arr2);
​
     console.log(arr3);
​
 join
     功能:将数组转换为字符串
     参数:join([分隔符]) 默认是逗号
     返回值:被转换的字符串
​
     var arr = [6, 5, 4, 7];
     var str = arr.join("嘿嘿");
     console.log(str);

多维数组

多维数组:一个数组中的元素,依然是一个数组
多维数组是由一维数组嵌套实现的
​
    var arr = [
        [1, 2], //arr[0][0]
        [3, 4, 5],
        [6, 7, 8, 9]
    ]
​
    console.log(arr[1][2]);
​
    console.log(arr);
​
    for (var i = 0; i < arr.length; i++) {
        // console.log(arr[i]);
        for (var j = 0; j < arr[i].length; j++) {
            document.write(arr[i][j] + " ");
        }
        document.write("<br>");
    }

冒泡排序

对于数组元素的一种排序方法
核心思想:两两比较
外层循环决定趟数:N-1
内层循环决定每趟的次数:N-i(趟)-1
​
var arr = [6, 5, 7, 4, 8, 3, 9, 2, 0, 1];
var t;
for (var i = 0; i < arr.length - 1; i++) {
    for (var j = 0; j < arr.length - i - 1; j++) {
        if (arr[j] > arr[j + 1]) {
            t = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = t;
        }
    }
}
console.log(arr);