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

时间:2015-06-23 02:28:17

标签: recursion coffeescript

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

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

var collection = [
    {name: 'Ford', is_available: true, color: 'blue'},
    {name: 'Toyota', is_available: false, color: 'green'},
    {name: 'Honda', is_available: false, color: 'red'}
];

var findItem = function(arr, prop) {
    var position = Math.floor(Math.random() * arr.length);
    var item = arr[position];

    if (arr.length === 0) {
       console.log(arr.length, 'Array is empty.  Ending!');
       return;
    }
    else if (item[prop] === true) {
        console.log('Found one!',item.name);
        return item.name;
    }
    else if (item[prop] === false) {      
      arr.splice(position, 1); //Remove item from the array
      console.log(arr);
      return findItem(arr, prop); //Recursively call function again.
    }
};

findItem(collection, 'is_available');

1 个答案:

答案 0 :(得分:1)

如果用户要求获得一个谓词成立的随机元素,Array::filter可能更好 -

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