2012-10-09 79 views
0

與紅寶石哈希#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方法,但只適用在鍵上。

+1

你可以通過一個函數來'過濾器'('filter(obj,(k,v) - > ...)'),然後'result [k] = v for k,v當參數fn(v) –

回答

2

不幸的是,CoffeeScript解析總是生成數組。你可以使用下劃線的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} 
+0

好的。我喜歡'不'位,沒有想到這一點。 – sbeam