JavaScript数组知识点小结

写在前面的话

  • 最近有学习一些新东西,但是在学习新东西的同时,对很多基础的知识也是不能忽略的,经常用还好,一旦不怎么常用了,会渐渐生疏,当然,本文的数组是常用的,但是相较于其他强类型的语言来说,JavaScript的数组就太“自由”了,但是注意一点就是万变不离其宗,虽然“自由”很多,但是其本身的语法也会对其有相应的限制(坑多),因此小结了本文,以备后续的查看,复习。当然,文中尚且有不足之处,还请留言提出,以便交流,学习进步。谢谢!

数组的概念

  • 数组是指的数据的有序列表。
  • 同一个数组中, 元素的类型不做任何限制。

特点

  • 数组的长度可以动态改变
  • 同一个数组可以存储不同的数据类型
  • js变量是没有类型的

数组的创建

  • 数组字面量[数组的元素]
  • 使用构造函数
  • 1、当用构造函数创建数组对象非的时候,如果只传递了一个整数,那么这个整数表示了要创建的数组的长度,其他情况都是表示数组中初始化的元素。
var arr3 =   new Array(5);
    console.log(arr3.length);//1
  • 2、使用构造函数创建数组对象的时候,new可以省略。
var arr4 = Array("a","b");
    console.log(arr4);

访问数组的方式:

  • 使用数组中元素下标(index)
  • 数组中每个元素都有一个下标
  • 元素从0 – length-1

js中的数组是可以动态的改变。

  • 1、可以给最后一个元素赋值,来增加数组的长度。
  • 2、直接更改length的值,也可以改变数组的长度。
    • 如果更改的length的值小于最初,则会把多余的元素从数组中移除。
  • 稀疏数组
    var arr = [10, 20];
    arr[10] = 100;
    arr[20] = 200;

数组的遍历

  • 1、普通的for
for(var i = 0, len = arr.length; i < len; i++){
    arr[i]
}
  • 2、for in 可以遍历数组。 主要是用来遍历对象的属性。
for(var i in arr){ //i一定是代表了索引  arr指的是要遍历的元素
   console.log(i + " " + arr[i]);
}
  • 3、es5:forEach 每个数组给添加了一个方法,可以去遍历数组中的元素。
    • forEach:专门去遍历一个数组
    • 匿名函数称之为回调函数
arr.forEach(function(element, index){  //参数1:元素   参数2:索引
   //代码
});

数组常用的方法

转化方法

  • 1、toString()

  • 2、join(连接符字符串) //参数就是


栈方法

  • 栈结构 FILO
  • push();push的时候,可以一次性的添加多个元素。入栈一个元素,这个元素会成为最后一个元素。方法的返回值:最新的元素个数。
  • pop();从数组中出栈一个元素。是数组中的最后一个元素,返回值就是出栈的那个元素。

模拟队列

  • FIFO(first in first out)
  • shift:删除队首的元素(下标为0的元素)
  • unshift:向数组的最前面添加元素(可以多个)

数组的一些其他方法

  • 1、元素的倒置:reverse
    • 倒置数组中的元素。更改数组本身。
  • 2、查找元素的索引
    • 如果在数组中找不到,则返回-1;
    • arr.indexOf(item); //返回从前面查找item第一次出现的下标
    • arr.lasrIndexOf(item); //从后面开始查找item第一次出现的位置
    • indexOf(item, fromBack): 从第二个参数的位置开向后始查找 item 第一次出现的位置
    • lastIndexOf(item, fromForward): 从第二个参数的位置开始向前查找 item 第一次出现的位置

得到新数组的方法

  • 1、数组的连接

    • arr1.concat(arr2) 把arr2连接到arr1,返回连接后的新数组,注意:不会更改arr1.

  • 2、截取数组

    • slice(start, end) 不会修改原数组
    • start:截取的开始位置(包括)
    • end:结束的位置(不包括),可以省略,省略后表示一直截取到结尾。
    • start 和 end 是支持 负数的 。 -1 代表最后一个元素。end必须大于start。

  • 3、向数组或从数组中添加或删除元素

    • splice(index, count); 参数1:开始删除的下标,参数2:删除的个数;返回删除的那些元素。会更改原数组。
    • 插入的时候第二个参数一般设置为0. arr1.splice(1, 0,”指令”, “fengjie”);
    • 替换:用指定的元素去替换 从参数1 开始的 参数2 的arr1.splice(1, 1,”指令”, “fengjie”);//把1的位置删掉,然后再在1的位置添加

数组的排序

  • 1、冒泡
    • 相邻的两个元素进行比较,只要碰到前面的大于后面的就进行交换。
        var arr = [1, 10, 3, 20, 2, 4, 0, 5, 56, 88];
        for(var j = 0; j < arr.length - 1; j++) { //循环次数表示参与排序的元素的个数
            for(var i = 0; i < arr.length - 1 - j; i++) { //减1为了保证参与的排序的元素下标不会超过length -1,减j是了避免比较过的元素再参与比较,提高效率
                if(arr[i] < arr[i + 1]) {//降序
                    var temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
        }
        console.log(arr);

  • 2、选择
  • 先选择一个元素最为小的或者最大的,然后再与气体元素进行比较。
        var arr = [1, 10, 3, 20, 2, 4, 0, 5, 56, 88];
                 //选择  效率更高
        /*for(var i = 0; i < arr.length - 1; i++) {
            var minIndex = i;//记录最小的位置的下标
            for(var j = i + 1; j < arr.length; j++) {  //选择了i为最小的,从i+1开始比较
                if(arr[minIndex] > arr[j]) {
                    minIndex = j; //先记录位置
                }
            }
            //minIndex 就是最小的那个元素
            if(minIndex != i) {  //比较完一轮后就交换数据
                var temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
            }
        }*/

        //选择   效率更低,比较后直接交换
        /*for(var i = 0; i < arr.length - 1; i++){
            for(var j = i + 1; j < arr.length; j++){
                if(arr[i] > arr[j]){
                    var temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }*/
        console.log(arr);

数组自带的排序方法

  • arr.sort(); 默认排序规则是按照字母表顺序来排。
  • 数组中的元素都会转成string之后,再按照字母表顺序来排。
  • arr.sort(function) //function 叫比较函数
arr.sort(function(a, b){
     /*
         返回值必须是整数:
          如果返回值 > 0 就认为 a >  b    a在b右边
                   === 0        a === b    
                     < 0        a < b     a在b左边
     */
 /*    if(a >  b){
        return 1;
     }else if(a === b){
        return 0;
     }else{
         return -1;
     }
//降序就1变-1,-11
*/
     return a - b;//升序: 
 //  return b - a;//降序: 
});

数组的检测

  • instanceof:检测某个对象是不是属于某个类型。结果是true或者false。
  • Array.isArray(arr); 参数就是要检测的那个数组。结果是true或者false。
  • 在js中只有值传递。
    • 1、简单类型的话,传递的就是那个值的一个copy
    • 2、如果是对象类型,传递的是那个对象的地址值的copy

二维数组

  • js中没有真正的二维数组
  • 一维数组中的元素是一维数组的时候,就是二维数组。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值