1

这是我在 StackOverflow 上的第一篇文章。问候!

我是一个学习 JavaScript 和 CoffeeScript 的绝对初学者程序员。

我正在编写一个递归函数来简单地作为学习练习来搜索对象。

我期望该功能做什么:

  1. 向函数传递一个对象和一个项目。
  2. 如果项目存在,则返回“找到项目”。
  3. 如果项目不存在,则返回“未找到项目”。

它目前的作用:

  1. 向函数传递一个对象和一个项目。
  2. 即使该项目存在,它也会返回“未找到项目”。

这是我的 CoffeeScript:

meats =
        a: "chickens"
        b: "bacons"
        c: "hams"
        d: "salamis"
        e: "beefs"

meatSearch = (dict, key) ->
        if dict is key
        then console.log "found #{dict.item}"
        else if dict.sub
        then meatSearch dict.sub, key
        else console.log "item not found"

meatSearch meats, "b"
4

2 回答 2

1

首先,我认为示例数据应该更具递归性。只有一层,很难递归

第二:不清楚为什么要搜索一个项目(即键值对)以及您期望的返回值是什么。因此,我稍微更改了您的示例以返回键上定义的值

meats =
    a: "chickens"
    b: 
        b1: "bacon"
        b2: "Schinken"
        b3: "Sunka"
    s: 
        s1: "French Salami"
        s2: "Italian Salami"
    e: "beefs"

search = (dict, key) ->
    #check if dict is not an object and return imediately
    return null if dict != Object(dict)

    #get value of key
    result = dict[key]
    # return value if key is found
    return result if result

    #else iterate over keys and call search recursively for the value
    for k of dict
        console.log "#{k}: #{dict[k]}"
        result = search dict[k], key
        # return as soon as something is found
        return result if result

    #return null if nothing found
    return null

    console.log search meats, "b3" #should return <<Sunka>>
于 2013-07-25T19:47:03.867 回答
0

试试这样的事情怎么样[使用javascript,不是咖啡对不起]:

var index = 0;
var meats = {
    0:'chickens',
    1:'bacons',
    2:'hams',
    3:'salamis',
    4:'beefs'
};

searchMeats: function(object, item) {
    console.log(object,item);
    if (object[index] === item) {
        console.log('found ' + item);
    } else if (object[index+1]) {
        delete object[index];
        index = index + 1;
        searchMeats(object, item);
    } else {
        console.log('item not found');
    }
};
searchMeats(meats, "hams");

它不是超级漂亮,但它使用递归!

于 2013-07-25T20:17:36.303 回答