我有以下代码:
chartJsObject = [{label: "Label Stuff", datasets: []}]
i = 0
while i < 5 do
chartJsObject[i][:datasets] << [rand(10), rand(10)] if chartJsObject[i]
i+=1
end
虽然我希望datasets
包含五组#,例如[9, 9]
,[1, 2]
等,但我得到:
chartJsObject # => [{"label":"Label Stuff","datasets":[[9,9]]}]
我在while循环中做错了什么?
答案 0 :(得分:1)
chart_js_object
只有一个元素,索引为0.因此每次调用chart_js_object[i]
i
都不是零,而是返回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 :(得分:1)
chartJsObject
数组只有一个数据,因此数组计数为1
,数组索引为chartJsObject[0]
。循环体仅运行一次,因为chartJsObject
数组中只有一个数据,并且您已将条件指定为
if chartJsObject[i]
这就是它给你结果的原因。