代码之家  ›  专栏  ›  技术社区  ›  JSmith

为什么splice()没有返回值

  •  -1
  • JSmith  · 技术社区  · 3 年前

    我想知道,这可能是一个愚蠢的问题,为什么 splice 在明显相同的情况下给了我不同的结果。

    一个正在使用 [] 另一个正在使用 Array 构造函数

    我在网上查了一下,显然可能是关于 sparse 值,但可能不是。不过,有一件事,在我的一个项目中,我使用了第二种情况,在检查了数组后,看起来索引不是从0开始的,而是数组所在的位置 spliced 有什么想法吗?

    const arr = new Array(3)
    
    arr.push( 1 );
    arr.push( 2 );
    arr.push( 3 );
    
    arr.splice( 0, 2 );
    
    console.log( arr[ 0 ] );

    const arr = [ 1, 2, 3 ];
    
    arr.splice( 0, 2 );
    
    console.log( arr[ 0 ] );
    2 回复  |  直到 3 年前
        1
  •  1
  •   Andyally    3 年前

    当使用新的array(3)构造函数创建数组时,您的数组已经有三个空槽,每次推送某个东西时,都会将其推送到索引3,而不是索引0。最终你有

    Array(6) [ <3 empty slots>, 1, 2, 3 ]
    

    所以arr[0]实际上是空槽。 你需要设定你的价值观,而不是推动

    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    
        2
  •  1
  •   XMehdi01    3 年前

    案例1:

    使用创建阵列时 const arr = new Array(3); ,您正在创建一个长度为3的数组对象,其中每个值都是未定义的。使用添加三个值 arr.push(1), arr.push(2), and arr.push(3) 会产生这样的数组: [undefined, undefined, undefined, 1, 2, 3]

    案例2:

    您从一个数组开始,该数组包含 [1, 2, 3] .使用 arr.splice(0, 2) 删除前两个元素 [1, 2] ,仅离开 [3] 。当您登录时 arr[0] ,它显示3,因为它现在是数组中的第一个也是唯一一个元素。

    参考编号: Array#splice