我正在使用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的子数组
答案 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(_ => []);