我如何在Ruby中重写这个JavaScript循环?

时间:2012-09-26 22:15:48

标签: javascript ruby

代码:

var some_var = [/*.......*/];
var compare_var;
for (var i = 0; i < some_var.length - 1; i++){
    if (some_var[i] <= compare_var && compare_var < some_var[i + 1]){
        return some_var[i];
    }
}

some_var的一个值为30,下一个为40,下一个为50,compare_var为42。

即使它小于42,它也不会返回30,因为42不小于40.这也意味着它将返回40,因为它小于42而42小于50。 / p>

修改:

有人提到代码翻译对于SE.so来说并不是很好。只是说清楚:我确实在ruby中尝试了几种不同的东西。我在javascript方面有更多的经验,所以我能想到的最好的方法是在javascript中写出我需要的内容,以便我可以看到它如何转换为ruby。谢谢你的回答

3 个答案:

答案 0 :(得分:3)

我会使用neato Enumerable#each_cons(n) method

def foo(arr, x)
  arr.each_cons(2) do |a,b|
    return a if (a <= x) && (x < b)
  end
  nil # Not found
end

foo([30,40,50], 42) # => 40

这基本上会创建每对的“滑动窗口”,然后当您找到包含目标值(x)的对时,您可以返回该对中的第一项。

答案 1 :(得分:2)

这是一个单行:

some_var.select{|v| v < compare_var}.max

答案 2 :(得分:1)

删除var关键字,将for循环更改为some_var.each,然后在Ruby中获得有效的代码。

PS。 StackOverflow中的代码转换不正确