美文网首页
JS初始化数组的几种方法

JS初始化数组的几种方法

作者: 硅谷干货 | 来源:发表于2021-11-27 22:37 被阅读0次

    1. Array.prototype.fil()

    用给定值填充数组

    初始化
    let array = new Array(5).fill(false);
    console.log(array);
    //显示如下
    //[false, false, false, false, false]
    
    指定范围改变
    let array = [1,1,1,1,1,1];
    array.fill(0,1,3); //从下标1到下标3之前将值改变为0
    console.log(array)
    //显示如下
    //[1, 0, 0, 1, 1, 1]
    

    2. Array.from() 方法:

    Array.from方法用于将两类对象转为真正的数组:类数组的对象( array-like object )和可遍历( iterable )的对象(包括 ES6 新增的数据结构 Set 和Map )。

    let arrayLike = {  
      '0': 'a',  
      '1': 'b',  
      '2': 'c',  
      length: 3  
    };  
    // ES5 的写法  
    var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']  
    // ES6 的写法  
    let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']  
      
    // NodeList 对象  
    let ps = document.querySelectorAll('p');  
    Array.from(ps).forEach(function (p) {  
      console.log(p);  
    });  
    // arguments 对象  
    function foo() {  
    var args = Array.from(arguments);  
    // ...  
    }  
    
    //字符串转换为字符数组str.split('')  
    Array.from('hello')  // ['h', 'e', 'l', 'l', 'o']  
    let namesSet = new Set(['a', 'b'])  
    Array.from(namesSet) // ['a', 'b']  
      
    Array.from({ length: 3 });  // [ undefined, undefined, undefined ]  
    

    对于还没有部署该方法的浏览器,可以用Array.prototype.slice方法替代:

    const toArray = (() =>
      Array.from ? Array.from : obj => [].slice.call(obj)
    )();
    

    Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

    Array.from(arrayLike, x => x * x);  
    //  等同于  
    Array.from(arrayLike).map(x => x * x);  
    Array.from([1, 2, 3], (x) => x * x)  
    // [1, 4, 9]  
    //Array.from回调函数
    var arr1 = Array.from([1,2,3], function(item){
        return item*item;
    });
    var arr2 = Array.from([1,2,3]).map(function(item){
        return item*item;
    });
    var arr3 = Array.from([1,2,3], (item) => item*item);
    
    console.log(arr1); //[ 1, 4, 9 ]
    console.log(arr2); //[ 1, 4, 9 ]
    console.log(arr3); //[ 1, 4, 9 ]
    

    值得提醒的是,扩展运算符(...)也可以将某些数据结构转为数组。

    // arguments 对象  
    function foo() {  
      var args = [...arguments];  
    }  
    // NodeList 对象  
    [...document.querySelectorAll('div')]  
    

    3. Array.of()

    Array.of方法用于将一组值,转换为数组。Array.of总是返回参数值组成的数组。如果没有参数,就返回一个空数组。

    Array.of基本上可以用来替代Array()或new Array(),并且不存在由于参数不同而导致的重载。它的行为非常统一。

    这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异

    Array() // []  
    Array(3) // [, , ,]  
    Array(3, 11, 8) // [3, 11, 8]  
      
    Array.of() // []  
    Array.of(3) // [3]  
    Array.of(3, 11, 8) // [3,11,8]  
      
    Array.of(3).length // 1   
    Array.of(undefined) // [undefined]  
    Array.of(1) // [1]  
    Array.of(1, 2) // [1, 2]  
    

    Array.of方法可以用下面的代码模拟实现:

    function ArrayOf(){
      return [].slice.call(arguments);
    }
    

    点赞加关注,永远不迷路

    相关文章

      网友评论

          本文标题:JS初始化数组的几种方法

          本文链接:https://www.haomeiwen.com/subject/nroqxrtx.html