2016-07-12 10 views
1

この質問の背景は、GoogleビジュアライゼーションカレンダーのaddListenerから選択したセルにアクセスしようとしています。私はJSON.stringify(chart.getSelection());を使って、選択したセルを印刷することができました。 [{"date":1468195200000,"row":0}]と表示されます。JSON.stringifyオブジェクトのデータにアクセスする必要があります

私の問題は、この日付オブジェクトにアクセスすることです。私はそれにアクセスしようとしました

var obj=JSON.stringify(chart.getSelection()); 
     console.log('selected value '+obj.date); 

しかし、これはUndefinedと表示されます。 objを印刷すると[オブジェクト、オブジェクト]として表示されます

詳細が必要な場合はお知らせください。どんな提案もありがとうございます。

+0

...選択を解除するには、再度選択し、次の作業のスニペットを参照してください日付を選択しますタイプミス、それはJSON.stringifyになりますが、SON.stringifyにはなりません – brk

+1

データの内容を読む必要がある場合、なぜそれを文字列表現に変換していますか? –

+0

@ user2181397ありがとう、私は訂正しました。 –

答えて

4

JSON.stringify()は、データオブジェクトを文字列にシリアライズします。オブジェクトに直接アクセスするだけです。

var data = chart.getSelection()[0]; // assuming there is only ever one item in the selection array. 
console.log(data.date) 
+3

'data'は配列ですから、最初に正しい配列要素にアクセスしてから、プロパティー –

+0

oops ...にアクセスする必要があります。 – chardy

+0

助けてくれてありがとう –

2

これを試してみてください:

var data = [{"date":1468195200000,"row":0}] 
 

 
var rw = data[0].row; 
 
var dt = new Date(data[0].date); 
 

 
console.log(rw); 
 
console.log(dt);

+1

_ "これを試してください:" _なぜですか?「これを試してください」答えは、何が間違っているのか、問題を解決するために必要なものをユーザーに教えるのに役立たない。 –

+0

助けてくれてありがとう –

+1

@PatrickEvans:何について話していますか?私は彼に正しい部分のサンプルを渡したので、彼/彼女は自己によって学び、やっていくことができます。彼/彼女は "なぜ"ではなく、問題を解決する必要がありますか?彼/彼女が「なぜ」と言ったら、私は説明をします。あなたはなぜ彼に教えていないのですか?他の人に答えてもらえません... –

0

これは、オブジェクトの配列であるが、この配列内の1つのオブジェクトのみが存在する(またはそう私は思う)ので、あなたが何をすべきかであります代わりにconsole.log(obj[0].date);

+0

助けてくれてありがとう –

1

慎重両方の選択が行われたとき、'select'イベントが発生

chart.getSelection()[0]

'select'イベントを受け取る際に直接最初の配列要素へのアクセス、削除

ので上記の行は、選択が解除されたときにに失敗します。

は、アクセスする前にlengthを確認...

selection = chart.getSelection(); 
    // check selection length 
    if (selection.length > 0) { 
    console.log(selection[0].date); 
    } else { 
    console.log('selection removed'); 
    } 

がある

google.charts.load('current', { 
 
    callback: function() { 
 
    var dataTable = new google.visualization.DataTable(); 
 
    dataTable.addColumn({ type: 'date', id: 'Date' }); 
 
    dataTable.addColumn({ type: 'number', id :'Score' }); 
 
    dataTable.addRows([ 
 
     [ new Date(2016, 3, 13), 101 ], 
 
     [ new Date(2016, 3, 14), 102 ], 
 
     [ new Date(2016, 3, 15), 103 ], 
 
     [ new Date(2016, 3, 16), 104 ], 
 
     [ new Date(2016, 3, 17), 105 ] 
 
    ]); 
 

 
    var chart = new google.visualization.Calendar(document.getElementById('chart_div')); 
 
    google.visualization.events.addListener(chart, 'select', function() { 
 
     var selection = chart.getSelection(); 
 

 
     // check selection length 
 
     if (selection.length > 0) { 
 
     console.log(selection[0].date); 
 
     } else { 
 
     console.log('selection removed'); 
 
     } 
 
    }); 
 
    chart.draw(dataTable); 
 
    }, 
 
    packages:["calendar"] 
 
});
<script src="https://www.gstatic.com/charts/loader.js"></script> 
 
<div id="chart_div"></div>

+0

カレンダーチャートは決して複数の選択された日付を持つことはできません。 – WhiteHat

+0

'[0]にアクセスする前に' length'をチェックする必要があります。 '、または選択されていないとエラーがスローされます... – WhiteHat

関連する問題