2017-09-22 8 views
-2

I次のコードを持っている:私は間違ってやっている何ルビのハッシュにアイテムを追加すると、アイテムはなぜ上書きされますか?

chartJsObject # => [{"label":"Label Stuff","datasets":[[9,9]]}] 

:私は#Sの5セット、[9, 9][1, 2]などのように、私が手を含めるようにdatasetsを期待しながら

chartJsObject = [{label: "Label Stuff", datasets: []}] 

i = 0 

while i < 5 do 
    chartJsObject[i][:datasets] << [rand(10), rand(10)] if chartJsObject[i] 
    i+=1 
end 

をwhileループ?

答えて

1

chart_js_objectにはインデックス0の要素が1つしかありません。chart_js_object[i]の各呼び出しは、iが0以外の場合、nilを返します。これにより、エラーが発生しますが、操作の最後に条件付きでコードが最初の後に各反復を無視するようになっている点が異なります。

変数名にRuby standardsを使用しましょう。私はsnake_caseに翻訳します。また、Rubyではwhileループがかなりまれです。特定の回数だけ操作を実行するには、#timesメソッドを使用します。

我々はこれで終わるので:

>> 5.times { chart_js_object[0][:datasets] << [rand(10), rand(10)] } 
>> chart_js_object 
=> [{:label=>"Label Stuff", :datasets=>[[0, 4], [6, 0], [5, 4], [4, 6], [8, 6]]}] 
1

chartJsObject配列は、唯一の基準を持っているので、配列数は1で、配列のインデックスがchartJsObject[0]です。 chartJsObject配列はそれで一つだけデータムを持っているとして、ループ本体は、一度だけ実行され、あなたはそれがあなたのような結果が得られる理由です

if chartJsObject[i] 

などの条件を与えています。

関連する問題