Javascript Underline.js或CoffeeScript用于查询多个对象键的习惯用法?

Javascript Underline.js或CoffeeScript用于查询多个对象键的习惯用法?,javascript,coffeescript,underscore.js,Javascript,Coffeescript,Underscore.js,我有一个已解析的查询字符串对象,req.query,我想看看该对象是否有三个键中的任意一个:foo,bar,baz 是否有一种惯用的方式用下划线和/或CoffeeScript查询 # simple and direct but not very DRY: if req.query.foo or req.query.bar or req.query.baz .. # using the any filter combined w/ CS's in sugar: if _(req.query)

我有一个已解析的查询字符串对象,
req.query
,我想看看该对象是否有三个键中的任意一个:
foo
bar
baz

是否有一种惯用的方式用下划线和/或CoffeeScript查询

# simple and direct but not very DRY:
if req.query.foo or req.query.bar or req.query.baz
  ..

# using the any filter combined w/ CS's in sugar:
if _(req.query).any (val, key) -> key in ['foo', 'bar', 'baz']
  ..

# plucking just the desired keys:
if _(req.query).pick('foo', 'bar', 'baz').keys().length
  ...
还有比这些更好的方法吗?无论哪种方式,你都会写些什么?

如何使用

使用如何

那么:

queryKeys = _.keys(req.query)
if _(queryKeys).intersection(['foo', 'bar', 'baz']).length
  ...
那么:

queryKeys = _.keys(req.query)
if _(queryKeys).intersection(['foo', 'bar', 'baz']).length
  ...
一些备选方案:

#辅助函数:
# ----------------
_has=(obj,arr)->(当obj.hasOwnProperty(key))时,arr中的key为1。长度>0
如果_有req.query,['foo','bar','baz']
...
#扩展“对象”:
# -------------------
对象::has=(arr)->
而arr.length&¬ result=@hasOwnProperty arr.shift()则
结果
如果req.query.has['foo','bar','baz']
...
#使用本机`Array::some`:
# ---------------------------
如果['baz','bar','foo'].some{}.hasOwnProperty.bind req.query
# ...
实际上,我会这样写:

if (true for key in ['foo', 'bar', 'baz'] when req.query[k]).length
但只有当列表比这个长时,否则简单的
if query.foo或query.bar或query.baz才能获得清晰和高效的结果。

一些替代方案:

#辅助函数:
# ----------------
_has=(obj,arr)->(当obj.hasOwnProperty(key))时,arr中的key为1。长度>0
如果_有req.query,['foo','bar','baz']
...
#扩展“对象”:
# -------------------
对象::has=(arr)->
而arr.length&¬ result=@hasOwnProperty arr.shift()则
结果
如果req.query.has['foo','bar','baz']
...
#使用本机`Array::some`:
# ---------------------------
如果['baz','bar','foo'].some{}.hasOwnProperty.bind req.query
# ...
实际上,我会这样写:

if (true for key in ['foo', 'bar', 'baz'] when req.query[k]).length

但只有当列表比这个长时,否则简单的
if query.foo或query.bar或query.baz
才能获得清晰和高效的结果。

啊,我忘了
isEmpty
也可以处理对象!谢谢你会用这种方式写吗?我想我会用这种方式写,似乎是最简单的,不依赖于咖啡脚本的魔力。另外,为了(其他人)的参考,我会用CS写一点不同的东西:
如果不是的话u.isEmpty(req.query)。选择“foo”、“bar”、“baz”
啊,我忘了
isEmpty
也适用于对象!谢谢你会这样写吗?我想我会这样写,似乎是最简单的,也不依赖于咖啡脚本的魔力。另外,为了(其他人)的参考,我会在CS中写得有点不同:
如果不是的话。isEmpty(req.query)。选择“foo”、“bar”、“baz”
你的意思一定是
选择
而不是
选择
选择
,在第三个例子中。在第三个例子中,您的意思必须是
拾取
,而不是
拾取