• JavaScript数组常用方法总结


    Javascript Array

    • 由于数组成员的键名是固定的(默认总是0、1、2…),因此数组不用为每个元素指定键名,而对象的每个成员都必须指定键名。JavaScript 语言规定,对象的键名一律为字符串,所以,数组的键名其实也是字符串。之所以可以用数值读取,是因为非字符串的键名会被转为字符串。

    • length

    // 只要是数组,就一定有length属性。该属性是一个动态的值,等于键名中的最大整数加上1。
    
    • 空位

      当数组的某个位置是空元素,即两个逗号之间没有任何值,我们称该数组存在空位(hole)

      数组的某个位置是空位,与某个位置是undefined,是不一样的。如果是空位,使用数组的forEach方法、for...in结构、以及Object.keys方法进行遍历,空位都会被跳过。

      1. 数组的空位不影响length属性。

        var a = [1,,1];
        console.log(a.length); // 2
        
      2. 如果最后一个元素后面有逗号,并不会产生空位

        var a = [1,2,3,4,];
        consle.log(a.length); // 4
        
      3. 数组的空位是可以读取的,返回undefined

        var a = [,,,,,];
        a[1]; // undefined
        
      4. 使用delete命令删除一个数组成员,会形成空位,并且不会影响length属性。

        var a = [1,2,3,4];
        delete a[1];
        console.log(a.length);
        console.log(a[1]);
        
    • 数组和类数组

      如果一个对象的所有键名都是正整数或零,并且有length属性,那么这个对象就很像数组,语法上称为“类似数组的对象”(array-like object)。

      1. 类数组转为类数组(字符串也是类数组)

        let arr  = Array.prototype.slice.call(arrylike);
        
      2. 类数组可以通过call来调用数组的方法

        let arrlike = {
          "0":'a',
          "1":"b",
          length:2
        }
        Array.prototype.forEach.call(arrlike,function(item,index) {
          	console.log(item,index);
        });
        
    • Array.prototype 所有数组实例都会从 [Array.prototype] 继承属性和方法。修改 Array 的原型会影响到所有的数组实例。

      1. [push()] / [pop()] - 在数组末尾增/删元素;

      2. [unshift()] / [shift()] - 在数组首部增/删元素;

      3. [concat()] - 把一个(或多个)数组和(或)值与原数组拼接,返回拼接后的数组。

      4. indexOf

      5. splice

        语法: array.splice(start[, deleteCount [, item1[, item2[, ...]]]]) 注意:在中括号外的是必要参数

        • start 起始索引
        • deleteCount待删除的个数
        • [item1,....] 插入的元素
        var myFish = ["angel", "clown", "mandarin", "sturgeon"];
            // 从索引2开始删除0个元素插入drum;
            // var removed = myFish.splice(2, 0, "drum");
            // console.log(removed);
            // 从索引2开始删除1个元素插入"truemp""
            var removed = myFish.splice(2, 1, "truemp");
            console.log(myFish);
        
        // 通过索引删除一个元素
        let pos = 1;
        let fruits = ["Strawberry", "Banana", "Mango"];
        let removeItem = fruits.splice(pos,1);
        
        
      6. slice

        // 赋值数组
        var shallowCopy = fruits.slice(); 
        // 浅拷贝就是基本类型值是直接复制值的,引用类型值是复制引用的(
        当在一个数组中修改引用数据类型的时候,也会影响另外一个)
        
        

        应用:将类数组转为数组

        [].slice.call(arraylike);
        Array.prototype.slice.call(arraylike);
        
    • Array

      1. from
      // 从类数组中构造数组,可以调用回调函数
      Array.from(arrlike)
      Array.from(arrlike,[mapFn])
      Array.from(arrlike).map(fn)
      
      // 从string中生成数组
      // 从set中生成数组
      // 从Map中生成数组
      // 从类数组对象中生成数组arguments
      
      // 序列生成器
      const range = (start, stop, step) => Array.from({length:stop-start/step + 1},(_,i)=>start+i*step);
      
      1. isArray

        // 判断是否为数组
        // 鲜为人知的事实:其实 Array.prototype 也是一个数组。
        Array.isArray(Array.prototype);
        
        // Array.isArray的实现方式
        if (!Array.isArray) {
          Array.isArray = function(arg) {
            return Object.prototype.toString.call(arg) === '[object Array]';
          };
        }
        
      2. of

        Array(7) // [ , , , , , , ] // 创建了7个数组的空位 这是指一个有7个空位(empty)的数组,而不是由7个undefined组成的数组
        Array.of(7) // [7]
        
    慢慢来,比较快!基础要牢,根基要稳!向大佬致敬!
  • 相关阅读:
    【CSP模拟赛】益智游戏(最短路(DJSPFA)&拓扑排序)
    【CSP模拟赛】仔细的检查(树的重心&树hash)
    【CSP模拟赛】奇怪的队列(树状数组 &二分&贪心)
    【洛谷】P1275 魔板(暴力&思维)
    【CSP模拟赛】方程(数学)
    【洛谷】P3177 [HAOI2015]树上染色
    【洛谷】P3188 [HNOI2007]梦幻岛宝珠
    方法重载(一)
    找最大值
    java 冒泡排序
  • 原文地址:https://www.cnblogs.com/rookie123/p/14473103.html
Copyright © 2020-2023  润新知