この関数の早い段階でarrを記録すると、値は次のようになります。私は[[null、null]、[null、null]]を印刷することを期待していました。代わりに、この関数が終了すると出力されるarrの値を出力します。なぜこの関数の変数に初期値がありますか?
updateBounds() {
let arr = [Array(2), Array(2)];
console.log('initial value')
console.log(arr);
arr[0][0] = this.state.homePoint.geometry.coordinates[0];
arr[1][0] = this.state.homePoint.geometry.coordinates[0];
arr[0][1] = this.state.homePoint.geometry.coordinates[1];
arr[1][1] = this.state.homePoint.geometry.coordinates[1];
this.state.points.forEach(p => {
if (p.geometry) {
if (p.geometry.coordinates) {
arr[0][0] = Math.min(p.geometry.coordinates[0], arr[0][0]);
arr[1][0] = Math.max(p.geometry.coordinates[0], arr[1][0]);
arr[0][1] = Math.min(p.geometry.coordinates[1], arr[0][1]);
arr[1][1] = Math.max(p.geometry.coordinates[1], arr[1][1]);
}
}
});
this.setState({bounds: arr});
}
得コンソール出力:
initial value
App.js:444 (2) [Array(2), Array(2)]
0: (2) [-122.438227, 37.742017]
1: (2) [-122.40766, 37.784995]
length: 2
__proto__: Array(0)
何が起こると思いますか? 'Object.assign({}、arr))'は 'arr'から物をコピーする新しいオブジェクトを作成します。しかし、作成されたオブジェクトはすぐに破棄されます。 – vlaz
あなたは何を達成しようとしていますか? –
私はあなたが配列の浅いコピーが必要と仮定しています。その場合、以下を使用できます: 'arr = Array.from(arr);' –