首页 > 解决方案 > 如何使用递归计算数组中数字的实例?

问题描述

我尝试使用递归(练习的一部分)编写一个函数(称为:tally)来扫描一个数字数组并返回一个对象,其中数字作为键,实例数作为值。

例子:

tally([2,3,4,5,5,5,5,5,5,5,6,7,,6,7,6,7,5,4,3,4,5,5,6])
//{2: 1, 3: 2, 4: 3, 5: 10, 6: 4, 7: 3}

我创建了框架,但我不确定使其工作的语法:

function tally(arr) {
    var obj = {}
    if (/*check if object ('obj') has a key corresponding to the array element*/) {
        //increase key's value by onee
    } else {
        //add key with value of 1
    }
    return obj
};

完成上述递归函数的任何提示?请尽量在你的答案中坚持我的结构,因为这是练习的一部分。

标签: javascriptarraysrecursion

解决方案


给你:

function tally(arr) {
    if (arr.length == 0) {
        return {}
    }
    var value = arr.pop()
    var obj = tally(arr)
    if (value in obj) {
        obj[value] += 1
    } else {
        obj[value] = 1
    }
    return obj
};

编辑:也可以使用slice()代替来完成pop()

function tally(arr) {
    if (arr.length == 0) {
        return {}
    }
    var value = arr[0]
    var obj = tally(arr.slice(1))
    if (value in obj) {
        obj[value] += 1
    } else {
        obj[value] = 1
    }
    return obj
};

推荐阅读