我正在尝试使用.map,所以不需要初始化product数组。
这是原始代码:
products = []
for page in (1..(ShopifyAPI::Product.count.to_f/150.0).ceil)
products += ShopifyAPI::Product.find(:all, :params => {:page => page, :limit => 150})
end
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
products = (1..(ShopifyAPI::Product.count.to_f/150.0).ceil).map do |page|
ShopifyAPI::Product.find(:all, :params => {:page => page.to_i, :limit => 150})
end
Run Code Online (Sandbox Code Playgroud)
哪个只返回第一个产品?我究竟做错了什么?
ShopifyAPI :: Product根据发送的参数页面和限制返回产品列表。
我不知道为什么你发现第二个片段只返回的第一个产品,但为了使其功能上等同于第一,你可以使用flat_map
,而不是map
在这里,或者粘在.flatten
末(或者flatten(1)
,如果您想更具体一点)
给定.find
调用返回的数组,您可以在以下示例中看到差异:
a = []
(0..2).each { |x| a += [x] }
# a == [0,1,2]
(0..2).map { |x| [x] }
# [[0], [1], [2]]
(0..2).flat_map { |x| [x] }
# [0, 1, 2]
Run Code Online (Sandbox Code Playgroud)
这是因为array + array
将两者结合在一起。
如果使用第一个代码段,products.push(<find result>)
则会看到相同的嵌套数组结果。
请参见Enumerable#flat_map和Array#flatten
归档时间: |
|
查看次数: |
2027 次 |
最近记录: |