zoukankan      html  css  js  c++  java
  • 数组空值empty

    Array构造函数只带一个数字参数时(否则是作为填充),该参数会被作为数组的预设长度,而非填充一个元素,因此数组内是空单元

    如果一个数组中存在一个空单元,即length的值大于实际单元数,这样的数组称为稀疏数组

    var a = (new) Array(3) // 目前chrome返回[empty * 3], 之前好像是[undefined * 3]
    // new可用可不用,不用的话内部会自动添加
    var b = [undefined, undefined, undefined]
    var c = []
    c.length = 3 // 目前chrome返回[empty * 3], 之前好像是[undefined * 3]
    

    就之前的返回值来看a,b,c很一致,但空单元与undefined并不相同

    a.map(function(v,i){ return i; }); // 目前chrome返回[empty * 3], 之前是[undefined * 3]
    b.map(function(v,i){ return i; }); // [0, 1, 2]
    
    var d = ['a', 'b', 'c', 'd']
    delete d[1]
    
    d.map((item, index) => {
      return {
        item,
        index,
      }
    })
    // (4) [{item: "a", index: 0}, empty, {item: "c", index: 2}, {item: "d", index: 3}]
    
    

    好在现在返回的是empty而非undefined,可以得到识别

    然而某些方法如join在对待空单元的表现与undefiend一致

    a.join('-'); // "--"
    b.join('-'); // "--"
    //实现参考如下
    function fakeJoin(arr,connector) {
      var str = "";
      for (var i = 0; i < arr.length; i++) {
      // 它主要考虑的是数组长度,这个是关键
        if (i > 0) {
        str += connector;
        }
        if (arr[i] !== undefined) {
          str += arr[i];
        }
      }
      return str;
    }
    

    想要填充undefined在数组中而非empty可以使用如下表达式

    var arr = Array.apply(null, { length: 3 }) // [undefined, undefined, undefined]
    // apply第二参数要求是数组或类数组(存在length属性)
    

    ES6添加了Array.of()方法来初始化数组,在只填入一个参数的情况是作为数组的填充而非设置长度

    var array1 = Array.of(3) //[3]
    var array2 = Array.of(1,2,3) //[1,2,3]
    
    //模拟
    function arrayOfLike() {
      return [].slice.call(arguments)
      // return [...arguments] ES6
    }
    // or
    function arrayOfLike(...rest) { return rest }
    
  • 相关阅读:
    BZOJ1042: [HAOI2008]硬币购物
    BZOJ1089: [SCOI2003]严格n元树
    BZOJ1060: [ZJOI2007]时态同步
    BZOJ2697: 特技飞行
    BZOJ2464: 中山市选[2009]小明的游戏
    BZOJ1430: 小猴打架
    BZOJ3675: [Apio2014]序列分割
    BZOJ2453: 维护队列
    BZOJ2120: 数颜色
    BZOJ4547: Hdu5171 小奇的集合
  • 原文地址:https://www.cnblogs.com/guanine/p/9216950.html
Copyright © 2011-2022 走看看