Recursion 使用coffeescript递归检查数组中的随机元素

Recursion 使用coffeescript递归检查数组中的随机元素,recursion,coffeescript,Recursion,Coffeescript,我有一个用咖啡脚本开发的代码库,因此我正在努力学习它。给定一个对象数组,如何从数组中随机选择一个对象,检查它的是否可用属性是否为true并返回它的名称属性,否则从数组中删除该对象并再次递归调用该函数 这就是我在JavaScript中的实现方式。但我不知道如何将其转换为coffeescript: var集合=[ {名称:'Ford',是否可用:真,颜色:'blue'}, {名称:'Toyota',是否可用:假,颜色:'green'}, {name:'Honda',是否可用:false,颜色:'r

我有一个用咖啡脚本开发的代码库,因此我正在努力学习它。给定一个对象数组,如何从数组中随机选择一个对象,检查它的
是否可用
属性是否为true并返回它的
名称
属性,否则从数组中删除该对象并再次递归调用该函数

这就是我在JavaScript中的实现方式。但我不知道如何将其转换为coffeescript:

var集合=[
{名称:'Ford',是否可用:真,颜色:'blue'},
{名称:'Toyota',是否可用:假,颜色:'green'},
{name:'Honda',是否可用:false,颜色:'red'}
];
var FINDETEM=函数(arr,prop){
变量位置=数学地板(数学随机()*arr.length);
var项目=arr[位置];
如果(arr.length==0){
log(arr.length,'数组为空。结束!');
返回;
}
否则如果(项[prop]==真){
console.log('foundone!',item.name);
返回item.name;
}
如果(项[prop]==false){
arr.splice(位置,1);//从数组中删除项
控制台日志(arr);
返回findItem(arr,prop);//再次递归调用函数。
}
};

findItem(集合“是否可用”)
如果用户需要获取一个随机元素,这样谓词就可以保存,
Array::filter
可能更好-

filterItem = (arr, prop) ->
    filteredColl = arr.filter (elem) -> elem[prop]
    filteredColl[Math.floor(Math.random()*filteredColl.length)].name

@你完全正确。我编辑了代码示例并将其删除。您是否在询问coffeescript对此代码的要求?()调用函数的方式与Javascript中完全相同:
func(arg1,arg2)
。您可以选择省略括号:
func arg1、arg2
。不多也不少。@deceze:括号在某些情况下是可选的,在函数没有参数的情况下永远不会。有些人扭曲他们的空白,试图永远看不到可怕的括号,有些人总是把它们放在。当然,
f(x,y)
f(x,y)
是不同的东西。这真的有点乱,就像在Ruby中一样。@muis肯定,关于括号的语句带有一堆星号。就我个人而言,只要有可能,我就把它们排除在外,而不必改变任何其他东西。如果你需要他们,你需要他们,当你不需要的时候,你不需要。