zoukankan      html  css  js  c++  java
  • js 数组

    数组(Array)

    数组也是一个对象,是一个用来存储数据的对象和Object类似,但是它的存储效率比普通对象要高
    数组中保存的内容我们称为元素
    数组使用索引(index)来操作元素
    索引指由0开始的整数

    数组的操作:

    创建数组

    var arr = new Array(12,48,[1]);  
    var arr = [12,48,[1]];  
    

    向数组中添加元素
    语法;
    数组对象[索引] = 值;

    arr[0] = 123;  
    arr[1] = "hello";  
    

    创建数组时直接添加元素
    语法:

     var arr = [元素1,元素2....元素N]; 
    

    例子:

     var arr = [123,"hello",true,null];  
    

    获取和修改数组的长度
    使用length属性来操作数组的长度
    获取长度:
    数组.length
    length获取到的是数组的最大索引+1
    对于连续的数组,length获取到的就是数组中元素的个数
    修改数组的长度
    数组.length = 新长度
    如果修改后的length大于原长度,则多出的部分会空出来
    如果修改后的length小于原长度,则原数组中多出的元素会被删除
    向数组的最后添加元素
    数组[数组.length] = 值;

    数组的方法

    functionName function usage
    push() 用来向数组的末尾添加一个或多个元素,并返回数组新的长度 语法:数组.push(元素1,元素2,元素N)pop()
    pop() 用来删除数组的最后一个元素,并返回被删除的元素
    unshift() 向数组的开头添加一个或多个元素,并返回数组的新的长度
    shift() 删除数组的开头的一个元素,并返回被删除的元素
    reverse() 可以用来反转一个数组,它会对原数组产生影响
    concat() 可以连接两个或多个数组 或 新元素,它不会影响原数组,而是新数组作为返回值返回 var re = arr1.concat(arr2,arr3,1,"2");
    flat() 实现数组扁平化,将多维转为1维,返回新数组 语法:arr.flat(depth) depth是深度

    slice(sart,[end])

    可以从一个数组中截取指定的元素
    该方法不会影响原数组,而是将截取到的内容封装为一个新的数组并返回
    参数:

    1. 截取开始位置的索引(包括开始位置)
    2. 截取结束位置的索引(不包括结束位置
      第二个参数可以省略不写,如果不写则一直截取到最后

    参数可以传递一个负值,如果是负值,则从后往前数

    splice()

    可以用来删除数组中指定元素,并使用新的元素替换,会影响原数组
    该方法会将删除的元素封装到新数组中返回
    参数:

    1. 删除开始位置的索引
    2. 删除的个数
    3. 三个及以后,都是替换的元素,这些元素将会插入到开始位置索引的前边

    splice() 方法 可用于3 个功能:

    let arr = [0,1,2,3,4,5]
    
    // 删除元素
    let res = arr.splice(4,2);	// [4,5] arr[0,1,2,3]
    
    // 替换元素
    let res = arr.splice(4,2, 1,2,3);	// [4,5] arr[0,1,2,3,1,2,3]
    
    // 插入元素
    let res = arr.splice(4,0, 1,2,3);	// [] arr[0,1,2,3,1,2,3,4,5]
    

    join([splitor])

    可以将一个数组转换为一个字符串
    参数:
    需要一个字符串作为参数,这个字符串将会作为连接符来连接数组中的元素
    如果不指定连接符则默认使用 ","

    let arr = [1,2,3];
    let res = arr.join("-"); // "1-2-3"
    

    sort()

    可以对一个数组中的内容进行排序,默认是按照Unicode编码进行排序,即便是纯数字
    调用以后,会直接修改原数组
    可以自己指定排序的规则,需要一个回调函数作为参数:

    我们可以自己来指定排序的规则
    我们可以在sort()添加一个回调函数,来指定排序规则,
    回调函数中需要定义两个形参,
    浏览器将会分别使用数组中的元素作为实参去调用回调函数
    使用哪个元素调用不确定,但是肯定的是在数组中a一定在b前边

    • 浏览器会根据回调函数的返回值来决定元素的顺序,
      如果返回一个大于0的值,则元素会交换位置
      如果返回一个小于0的值,则元素位置不变
      如果返回一个0,则认为两个元素相等,也不交换位置

    • 如果需要升序排列,则返回 a-b
      如果需要降序排列,则返回 b-a

    let a = [1,16,9,4,2,7,6];
    a.sort(function(a,b){
        // 升序
        return a - b;
        // 降序
        // return b - a;
    
        // 注意:不能用 > < 去进行比较,因为sort是按Unicode来比较的,所以需要 - 来隐式转换为数字
    });
    

    遍历数组

    遍历数组就是将数组中元素都获取到
    一般情况我们都是使用for循环来遍历数组

    for(var i=0 ; i<数组.length ; i++){  
        //数组[i]  
    }  
    

    forEach()

    使用 forEach() 方法来遍历数组(不兼容IE8)

    arr.forEach(function(value, index, obj){  
      // 回调函数的3个形参不一定都写上
    });
    

    forEach()方法需要一个回调函数作为参数,
    数组中有几个元素,回调函数就会被调用几次,
    每次调用时,都会将遍历到的信息以实参的形式传递进来,
    我们可以定义形参来获取这些信息。

    1. value:正在遍历的元素
    2. index:正在遍历元素的索引
    3. obj:被遍历对象
  • 相关阅读:
    LeetCode 81 Search in Rotated Sorted Array II(循环有序数组中的查找问题)
    LeetCode 80 Remove Duplicates from Sorted Array II(移除数组中出现两次以上的元素)
    LeetCode 79 Word Search(单词查找)
    LeetCode 78 Subsets (所有子集)
    LeetCode 77 Combinations(排列组合)
    LeetCode 50 Pow(x, n) (实现幂运算)
    LeetCode 49 Group Anagrams(字符串分组)
    LeetCode 48 Rotate Image(2D图像旋转问题)
    LeetCode 47 Permutations II(全排列)
    LeetCode 46 Permutations(全排列问题)
  • 原文地址:https://www.cnblogs.com/Liwker/p/14368842.html
Copyright © 2011-2022 走看看