2016-03-23 8 views
0

Array(data_array)から配列メンバにアクセスしようとしています。変数data_arrayは、以下のコードに似たjsonの一部です。以下のコードは実際のコードではありません。実際のコードは、Reactコンポーネントを作成しようとしているときに再生されます。完全なReactコンポーネントを貼り付けることができますが、不要な情報が含まれています。だから私はいくつかのモックの例を追加すると思った。それが人を欺いた場合の謝罪。現在、私はこのようなシナリオで間違っている可能性のあることについていくつかのヒントを得ることを望んでいましたか? :それはそのArray.IはJavaScriptにかなり新しいです言うようjavascriptのオブジェクト型のアクセス配列メンバー

私には混乱何
data: { 
    "name": "Arjun", 
    "records" : [ 
     { 
     "value": 3 
     }, 
     { 
     "value": 6 
     }, 
     { 
     "value":7 
     } 
    ] 
    } 
    var data_array = data.records 

    console.log(data_array) -> Array[3] 
    console.log(data_array[0]) -> It displays Uncaught TypeError: Cannot read property '0' of undefined 
    console.log(typeof data_array) -> Object. 

は私の第一の出力です。だから多分私は何かを逃しています。どんな助けもありがとう。

編集:これにはまだネスト化された反応コンポーネントがありませんが、この場合は使用できません。私は今


var React = require('react'), 
    Router = require('react-router'), 
    mui = require('material-ui'), 
    Foo = require('./foo.jsx'); 


var TempReact = React.createClass({ 
    mixins: [Router.Navigation], 

    getInitialState: function() { 
    return { 
     data: {} 
    }; 
    }, 

    componentDidMount: function() { 
    // Do a web request here to actually get the data from the backend API 
    // this.setState({ 

    // }); 

    // For now, load our fake data 
    this._loadFakeData(); 
    }, 

    render: function() { 
    //console.log(this.state.data) 
    for(var record in this.state.data.records) { 
     console.log(record.Value); 
    } 
    //console.log(this.state.data["records"][0]["Value"]) 
    return (
     <div> 

     <p>^ That will still say , since the header up there is decided by temp-page.jsx, which is 
      based on the route</p> 

     <br/> 
     <p>We've loaded the fake data into our component's state, and here's proof:</p> 
     {this.state.data.name} 
     <br/> 
     <br/> 

     <Foo name={["temp1",this.state.data.records,"green"]}/> 

     </div> 
    ); 
    }, 

    _loadFakeData: function() { 
    this.setState({ 
    data: { 
     "name": "Arjun", 

     "records" : [ 
      { 
      "Value": 6 
      }, 
      { 
      "Value": 7 
      }, 
      { 
      "Value": 8 
      } 
     ] 
     } 
    }); 
    } 

}); 

module.exports = TempReact; 
+1

デモを投稿して問題を再現できますか? – elclanrs

+2

再生できません - > https://jsfiddle.net/sqjxnp1k/ – adeneo

+0

このような迅速な返信をありがとうございます。私はReactコンポーネントのこの部分を試すことができます。だから私は何かを書こうとします。これが問題の要点です。 –

答えて

0

だから、問題が反応して、私がいたSetState関数()とされている場合がありますオブジェクトを空の配列に最初にプッシュしてオブジェクトにアクセスできます。

var varArr = new Array(); 
for(key in this.state.data.records) { 
    if(this.state.data.records.hasOwnProperty(key)) { 
     var value = this.state.data.records[key]; 
     varArr.push(value); 
    } 
} 
-1

data_arrayが配列であるため、ネストされたコンポーネントのFooを呼び出しています。配列内のdata.records。あなたは何を見たいですか?

+1

こんにちは。返信いただきありがとうございます。私はエラーを期待していないだろう。私が要素にアクセスしようとするとき。これも実際のコードではありません。私はそれを取り除き、実際のコードを書き直すべきだと思う。私はあなたが要素 –

3

配列はtypeofオブジェクトです。彼らはちょっとしたことが起こっているだけのオブジェクトです。

次の例では動作します:あなたはこのような何かをするとき

var data = { 
"name": "Arjun", 
"records" : [ 
    { 
     "value": 3 
    }, 
    { 
     "value": 6 
    }, 
    { 
     "value":7 
    } 
    ] 
} 
var data_array = data.records 
console.log(data_array[0]) // Object {value: 3} 

このエラーが起こる:

var data = {}; 
var data_array = data.array; // data.array is undefined and subsequently data_array. 
console.log(data_array[0]); // Throws: Uncaught TypeError: Cannot read property '0' of undefined 
+0

にアクセスするときに間違いにつながる何が起こりうるかについての答えを得ようとしていました。返信いただきありがとうございます。私はエラーを期待していないだろう。私が要素にアクセスしようとするとき。これも実際のコードではありません。私はそれを取り除き、実際のコードを書き直すべきだと思う。私は要素にアクセスするときにエラーにつながる何かが間違っている可能性についての答えを得ようとしていた –

+0

ああ私はあなたの実際のコードでそれを編集するでしょう。私はちょっとだけ説明するために私の答えを更新するでしょう:) – user2687646

+0

ちょっと私はできる限り最善のコードを追加しました。 –

0

あなたがいないなら遠くあなたがjsonDataという変数にこのオブジェクトを格納言うことができます例の場合:

var jsonData = { 
    data: { 
    "name": "Arjun", 
    "records" : [ 
     { 
     "value": 3 
     }, 
     { 
     "value": 6 
     }, 
     { 
     "value":7 
     } 
    ] 
    } 

} 

変数>プロパティ>にアクセスする必要があります。ネストされたプロパティは、そのようにのようなインデックスを指定します -

var data_array = jsonData.data; 
    console.log(data_array.records[0].value) 

は> HERE 3

例をログに記録する必要がありますhttp://codepen.io/theConstructor/pen/wGdpjq

+0

ちょっと私はできる限りコードを追加しました。 –

+0

私の例でリンクを更新/追加しました – KpTheConstructor

+0

を正確にチェックしてください。しかし、私はその反応コンポーネントで何をしているのですか?それは主に私の質問です。しかし、私は間違った方法でそれを求めるためのフレークをたくさん得ています:( –

関連する問題