Array()构造函数和使用Array Literal的不同交互

时间:2018-09-29 14:26:12

标签: javascript arrays multidimensional-array

我正在使用Array(n).fill([])初始化动态2d数组,并使用push插入。它一直插入所有子数组。我不知道为什么会这样。

这是两个不同的代码。

   ck show env
   ck virtual env --tags=lib,caffe

   python
   > import caffe

这将在所有子数组中插入值3。

let n=3
let madeWithConstructor = new Array(n).fill([]);
madeWithConstructor[0].push(3);

这将提供所需的输出,即仅索引0 = 3的子数组

2 个答案:

答案 0 :(得分:0)

所有索引的相同对象引用。函数PlayerComponent pc = pm.get(entity); if (pc.attacking) { switch (PlayerAgent.getCurrentState()) { case Idle: case Walking: if(PlayerAgent.getLastState() == PlayerState.Falling) { key = PlayerAnimations.FallAttack.ordinal(); if(ani.animations.get(key).isAnimationFinished(PlayerAgent.timer)) pc.attacking = false; }else key = PlayerAnimations.Attack.ordinal(); break; case Jumping: case DoubleJumping: key = PlayerAnimations.JumpAttack.ordinal(); break; case Falling: key = PlayerAnimations.FallingAttack.ordinal(); break; default: key = PlayerAnimations.Idle.ordinal(); break; } } else { switch (PlayerAgent.getCurrentState()) { case Idle: key = PlayerAnimations.Idle.ordinal(); break; case Walking: key = PlayerAnimations.Walking.ordinal(); break; case Jumping: key = PlayerAnimations.Jumping.ordinal(); break; case DoubleJumping: key = PlayerAnimations.DoubleJumping.ordinal(); break; case Falling: key = PlayerAnimations.Falling.ordinal(); break; default: key = PlayerAnimations.Idle.ordinal(); break; } } PlayerAgent.timer += deltaTime; } 对N个索引使用相同的对象。

您可以使用函数Array.from用不同的对象(数组)初始化每个索引。

Array.fill

答案 1 :(得分:0)

第一段代码大致与此:

function makeArray(len, defaultValue) {
  const arr = new Array(len);
  for (let i = 0; i < arr.length; ++i) {
    arr.push(defaultValue);
  }
  reutrn arr;
}

const arr = makeArray(n, []);

这意味着对数组中的每个索引使用相同的数组引用。

另一种做自己想要的事情的方法是:

const arr = Array(n).fill(null).map(_ => []);