数组的相关概念

数组

基本概念

1、概念:是一组有序(按照顺序排列)的数据集合;

2、索引:数组的下标,索引永远从0开始;

数组的创建

1、字面量创建数组:

var arr = [1,2,3,'Fray','18']
console.log(arr)

2、通过系统构造函数创建数组

var arr1 = []
var arr2 = new Array()

      --- 若不传参数,输出得到的就是一个空数组

var arr1 = new Array()
console.log(arr1)   //[]

       --- 若传一个参数并且大于0的数字,数组的长度就是这个参数

var arr2 = new Array(10)
console.log(arr2);    //长度为10的空数组
console.log(arr2.lenght);    //10

      --- 传递多个参数,每一个参数按照顺序都是数组中存储的数据

var arr3 = new Arrary(1,'a','b')
console.log(arr3)

数组的获取

1、数组不能使用点语法,可通过数组的下标(索引)来获取操作对应的数据内容

console.log(arr[0])   //获取数组中的第一个
console.log(arr[4])    //获取数组中的第5个

2、修改数组中的每一个数据的内容

arr[4] = 5
console.log(arr)   //输出新的arr中下标为4的数据内容被改成5

3、给数组添加数据及内容

arr [6] = 666
console.log(arr)    //输出新的arr数组中包含添加的新数据

4、当索引的数值大于数组中数据的个数时,输出的内容为undefined;

数组的长度

概念:数组成员的个数;可通过数组的length属性获取;

                 数组的索引从0开始,故最大值就是数组的长度减1;

                 反之,数组的长度就是数组索引的最大值加1;

var arr = [1,2,3,4]
console.log(arr.length);   //4   索引最大值为3

数据在内存中的存储状态

基本数据类型:number,string,Boolean,undefined,null

复杂数据类型(引用数据类型):function,array,object....

内存:

1、栈内存:基本数据类型;

2、堆内存复杂数据类型;

存储方法:

1、基本数据类型:直接在栈里面存储你的变量名,这个变量名就代表了这个数据;

2、复杂数据类型:数据在堆里面存储,变量名在栈里面存储赋值;

数据类型之间的比较:

1、基本数据类型是值的比较;

2、复杂数据类型是地址之间的比较;

变量赋值之间的区别

【主要看变量中存储的数据类型】

1、基本数据类型:赋值之后两个变量互不影响;

2、复杂数据类型:赋值以后,两个变量操作一个空间,只要用一个变量修改空间内容,那么两个变量看到的空间内容都修改了;

数组常用方法

【不改变变量中存储的地址】

1、删除数组最后一项数据   ——  pop

     语法:数.pop()  ;直接改变原始数组  ;返回值:删除掉的哪一项数据

var arr = [1,2,3,4]
var res = arr.pop()
console.log(arr);    //[1,2,3]
console.log(res);    //4   被删除的数组

2、在数组末尾添加一个数据  —— push

      语法:数组.push(需要添加的内容)  ;直接改变原始数组  ;返回值:增加数组之后的数组长度

var arr = [1,2,3,4]
var res = arr.push(100)
console.log(arr);    //Array(5)
console.log(res)    //长度为5

3、删除数组首项数据  ——  shift

     语法:数组.shift()   ;直接改变原始数组    ;返回值:删除的那一项数据

var arr = [1,2,3,4]
var res = arr.shift()
console.log(arr);     //[2,3,4]
console.log(res);     //1  被删除的那一项数据

4、在数据最前面添加一项数据  —— unshift

     语法:数组.unshift(需要添加的数据)   ;直接改变原数组   ;返回值:添加数组后的数组长度

var arr = [1,2,3,4]
var res = arr.unshift(100) 
console.log(arr);      //[100,1,2,3,4]
console.log(res);      // 5  添加数组后的长度

5、将数组的部分数据进行删除  —— splice

      语法:两种 ;直接改变原始数组  ;返回值:以数组的形势返回被删除的内容

//语法1:数组.splice(从哪个索引开始,删除多少个)
var arr = [1,2,3,4,5]
var res = arr.splice(2,2)
console.log(arr);          //[1,2,5]  从索引为2开始删除了两项数据
console.log(res);          //[3,4]   被删除的两项数据



//语法2:数组.splice(从哪一个索引开始,删除多少个,用新内容替换删掉的位置)
var arr = [1,2,3,4,5]
var res = arr.splice(2,2,'a','b')
console.log(arr);          //[1,2,a,b,5]若新内容的个数大于被删掉的个数,则按照输入顺序输出
console.log(res);          //[3,4] 被删除的内容

6、数组排序  —— sort

     语法:两种  ;直接改变原始数组  ;返回值:改变后的数组

//语法1:数组.sort()    
//直接使用,不传递参数时 是按最前面一位数字开始排序
var arr = [1,2,6,67,12,44,33,66,55]
var res = arr.sort()
console.log(arr);      //[1, 12, 2, 33, 44, 55, 6, 66, 67]
console.log(res);      //[1, 12, 2, 33, 44, 55, 6, 66, 67]


//语法2:数组.sort(function(a,b){return a-b})
//传递一个参数,这个参数是一个带着两个形参的函数,并且return 形参-形参
var arr = [1,2,6,67,12,44,33,66,55]
var res = arr.sort(function(a,b){return a-b})
console.log(arr);      //[1, 2, 6, 12, 33, 44, 55, 66, 67]
console.log(res);      //[1, 2, 6, 12, 33, 44, 55, 66, 67]

7、把数组反转过来  ——  reverse

      语法:数组.reverse  ;直接改变原始数组  ;返回值:就是改变后的数组

var arr = [1,2,3,4]
var res = arr.reverse()
console.log(arr);       //[4,3,2,1]   直接改变原始数组
console.log(res);       //[4,3,2,1]   返回改变后的数组

8、多个数组拼接  ——  concat

      语法:数组.concat(需要的拼接)  ;不直接改变原始数组  ;返回值:拼接好的数组;

var arr = [1,2,3,4]
var arr1 = [a,b,c,d]
var arr2 = ['say','hi']

var res = arr.concat(arr1,arr2,1234,true)
console.log(arr);     //[1,2,3,4]
console.log(arr1);    //[a,b,c,d]
console.log(arr2);    //['say','hi']
console.rlog(res);    //[1,2,3,4,a,b,c,d,'say','hi',1234,true]  
                      //所有的数组以逗号的形式拼接,可拼接数组,也可拼接单个数据

9、把数组元素转为字符串,并按照指定的东西连接  ——  join

      语法:数组.join  ;可以传参也可不传参,不传参则用逗号连接,传参就用传参的东西连接;

       不直接改变原始数组;   返回值:使用指定东西连接好的字符串

var arr = [1,2,3,4]
var res = arr.join()
console.log(arr);      //[1,2,3,4]   原始值不直接改变
console.log(res);      //1,2,3,4     不传参则用逗号连接

var res = arr.join('-')
console.log(arr);      //[1,2,3,4]   原始值不直接改变
console.log(res);      //1-2-3-4     传参则用传参的东西连接

10、查找数组中是否有对应的元素,有则返回对应元素的索引;无则返回-1;  —— indexOf

       语法:数组.indexOf (要查找的数组元素)  ;不直接返回原始数组  ;

        返回值:若数组有,则返回对应的索引;无则返回-1;

var arr = [1,2,3,4]

//语法1:数组.indexOf(要查找的数组元素)
var res = arr.indexOf('4')
console.log(arr);            //不直接改变原始数组
console.log(res);            //3  若有该元素,则返回对应的索引(下标)

var res = arr.indexOf('8')
console.log(res);              //-1  数组内无该元素则返回-1


var arr = [1,2,3,4,1,3]
//语法2:数组.indexOf(要查找的数组元素,从指定索引开始查找)
var res = arr.indexOf('1',2)
console.log(res);            //4 若有该元素,则返回对应元素的索引(下标)

二维数组

【数组中存储数组】

var arr = [
    [1,2,3,4],
    [5,6,7,8]
]
console.log(arr);    //Array(2)
console.log(arr[0][0])    // 1 第0项数组的第0项数据
console.log(arr[1][3])    // 8 第1项数组的第3项数据


//二维数组的遍历就是两层循环
for(var i = 0;i<arr.length;i++){
    for(var j = 0;j<arr[i];j++){
        console.log(arr[i][j])
    }
}

for和for in循环

通过for循环来循环数组的行为叫做遍历;

var arr = [1,2,3,4,5]
    for(var i = 0;i<arr.length;i++){
        console.log(arr[i])              //1,2,3,4,5
}

因为对象没有索引,所以需要用for in循环来遍历对象

var obj = {
    name:'Jack',
    age:18
}
for (var key in obj){
    console.log(key)       //输出值  Jack 和 18
}

for in循环的遍历次数以对象中有多少成员来决定,有多少成员,就执行多少次;

key是自己定义的一个变量,就如for循环中定义的i一样;

在每次循环过程中,key就代表着对象中某一个成员的属性名(键名);

数组的排列

冒泡排列

【数组中两个数比较大小,小的往前排,大的靠后排;数组遍历一遍后最大的数字在最后,变量第二遍后,第二大的数字在倒数第二的位置】

for(var j = 0;j<arr.length-1;j++){
    for(var i = 0;i<arr.length-1-j;i++){
        if(arr[i]>arr[i+1]){
            var tmp = arr[i]
            arr[i] = arr[i+1]
            arr[i+1] = tmp
        }
    }
}
console.log(arr)

选择排列

【假设索引为0是最小的数字,然后遍历数字,若有比假设小的数字,则取代该位置,第一次遍历后,最小的数排在了第一位;遍历第二遍时,假设索引为1的数字是最小的数字,继续循环上述操作】

for(var j = 0;j<arr.length;j++){
    var minIndex = j
    for(var i = 0;i<arr.length;i++){
        minIndex = i
    }
}
if(j !== minIndex){
    var tmp = arr[j]
    arr[j] = arr[minIndex]
    arr[minIndex] = tmp
}
console.log(arr)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值