与ruby的Hash#reject / delete_if方法最接近的是什么?
{a:1, b:2, c:3, d:4}.reject { |k,v| v > 2 }
=> {:a=>1, :b=>2}
这个快速版本使用key, value of <Object>
但它不优雅,并且缺乏传递任意条件的能力(作为块或其他方式)
params = {a:1, b:2, c:3}
filter = (hash)->
result = {}
(result[key] = value unless value > 2) for key, value of params
result
console.log(filter(params))
下划线有一个类似的_.omit
方法,但只适用于键。
答案 0 :(得分:2)
不幸的是,CoffeeScript理解总是生成数组。您可以使用Underscore的object
方法将[key, value]
数组转换为对象:
obj = {a:1, b:2, c:3, d:4}
_.object([k, v] for k, v of obj when v <= 2) # -> {a:1, b:2}
我建议您为此特定目的编写自己的方法:
reject = (obj, predicate) ->
res = {}
res[k] = v for k, v of obj when not predicate k, v
res
reject {a:1, b:2, c:3, d:4}, (k, v) -> v > 2 # -> {a:1, b:2}