Coffeescript 如果没有for循环,如何从对象获取键和值?
是否有更好的方法获取对象的键和值?我尝试在不使用Coffeescript 如果没有for循环,如何从对象获取键和值?,coffeescript,Coffeescript,是否有更好的方法获取对象的键和值?我尝试在不使用for循环的情况下执行此操作 obj = { collection: 'foo' } for key, value of obj console.log key, value 如果一个对象有一个键和一个值,我认为有一种更有效的方法可以做到这一点。但我可能错了。如果您只想检查对象是否只有一个键,则可以使用短路回路: exactly_one = (obj) -> return false if(!obj) how_many
for
循环的情况下执行此操作
obj = { collection: 'foo' }
for key, value of obj
console.log key, value
如果一个对象有一个键和一个值,我认为有一种更有效的方法可以做到这一点。但我可能错了。如果您只想检查对象是否只有一个键,则可以使用短路回路:
exactly_one = (obj) ->
return false if(!obj)
how_many = 0
for own key of obj
break if(++how_many == 2)
how_many == 1
基本思想是使用来。。。循环中开始计算对象中的键数。我们只关心三个案例:
少于一个键(即null
或没有键)。初始null
检查和how_many=0
初始化会处理此问题
只有一把钥匙。在这种情况下,循环将通过一次,++how_many
将在离开how_many==1
时被命中
有不止一把钥匙。在这种情况下,由于中断
,循环将只进行两次迭代。我们知道,一旦遇到第二个键,就会得到一个false
结果,因此无需继续计数
该函数最多进行两次循环迭代。这仍然是一个循环,但没有规则强制您在不需要的时候运行整个循环,您总是可以提前中断
演示:
对逻辑稍加调整就会得到“最多一个”、“至少一个”等等
如果您不是天生的C程序员,那么您可以稍微展开一下逻辑:
for own key of obj
++how_many
break if(how_many == 2)
你也可以这样写:
(break if(++how_many == 2)) for own key of obj
但这就把它推到了我的身上
own
东西只是添加了检查,以避免意外地从原型中抓取东西。你可能不需要这样,但既然他们真的想要抓住我,我宁愿在谨慎方面犯错
还有,但这并不是普遍支持的,当您只关心其长度是否为1时,它必须构建一个完整的数组:
exactly_one = (obj) ->
return false if(!obj)
Object.keys(obj).length == 1
演示:for
循环的有什么问题吗?如果一个对象有一个键和一个值,我认为有一种更有效的方法可以做到这一点。但是我可能错了。for..in
是在JS中发现对象键的最有效的方法,而不是object.keys()
。注释将问题从一些奇怪的、可能毫无意义的内容更改为更有趣的内容,因此我将其合并到问题中,并反转了我的投票。browser还是node.JS?如果您使用的是node.js或依赖于用户拥有合适的浏览器,则可以使用Object.keys
。