javascript - 如何使用递归计算数组中数字的实例?
问题描述
我尝试使用递归(练习的一部分)编写一个函数(称为: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
};
完成上述递归函数的任何提示?请尽量在你的答案中坚持我的结构,因为这是练习的一部分。
解决方案
给你:
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
};
推荐阅读
- c# - offzip 未检测到 Zlib 标头
- python - 求平方的另一种方法
- arrays - Excel数组索引/匹配vlookup到另一个表并乘以结果
- python - 叶标记弹出窗口显示完整的 html 代码而不是 pd.to_html() 表(python - spyder)
- java - 带有 ARG 的 Dockerfile Maven
- python - 没有密钥的 Python 凯撒密码程序
- php - 如何将两个 UPDATE 查询合并为一个不同的 WHERE 和 SET?
- list - 将多个未指定长度的列表传递给程序
- deep-learning - 结合两个 CNN
- java - 用于名称当前版本的谷歌驱动 API v3