2017-12-26 9 views
4

この関数の早い段階で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) 
+1

何が起こると思いますか? 'Object.assign({}、arr))'は 'arr'から物をコピーする新しいオブジェクトを作成します。しかし、作成されたオブジェクトはすぐに破棄されます。 – vlaz

+0

あなたは何を達成しようとしていますか? –

+0

私はあなたが配列の浅いコピーが必要と仮定しています。その場合、以下を使用できます: 'arr = Array.from(arr);' –

答えて

1

Array.splice()が削除された要素を含む配列を返します。 1つの要素だけが削除された場合は、1つの要素の配列が返されます。 要素が削除されない場合、空の配列が返されます。

+0

申し訳ありません、 "スプライス"ではなく "スライス"を書くつもりです – astrojams1

+0

@ astrojams1あなたのコードで置き換えて質問を更新してください – GMaiolo

4

これは確かに驚くべきことです...問題は、logに電話をかけたときに、ブラウザはオブジェクトの内容に注意しています(ログ呼び出しの時点で)。

通話時にオブジェクトの内容を確認する場合は、代わりにconsole.log(JSON.stringify(x))を使用してください。

+0

ありがとう!私はconsole.log(JSON.stringify(arr))を使用し、それは私のオブジェクトを期待どおりに印刷した – astrojams1

関連する問題