【发布时间】:2021-12-28 07:27:24
【问题描述】:
我有一个包含递归对象的数组,如下所示:
export const a: A = [
{
person: [
{
person: [{
person: [],
rating: 512,
justNumbers: [30, 15, 327]
},
{
person: [
{
person: [],
rating: 538,
justNumbers: [13, 55, 643]
},
{
person: [],
rating: 964,
justNumbers: [314, 523, 512]
}
],
rating: 413,
justNumbers: [876, 541, 623]
}],
rating: 176,
justNumbers: [842, 812,643]
}
],
rating: 235,
justNumbers: [33, 565, 73]
}];
我需要创建一个函数以递归方式对所有评分求和,并根据每个 justNumbers 数组中的所有数字创建一个数字数组,该数组按升序排序。
const recursiveNumbersSearch = (obj: object, targetKey: string, getSum = []) => {
const r = getSum;
Object.keys(obj).forEach(key => {
const value: any = obj[key];
if (key === targetKey && typeof value !== 'object') {
r.push(value)
} else if (typeof value === 'object') {
recursiveNumbersSearch(value, targetKey, r);
}
})
return getSum
}
function sumArray (arr : number[]): number {
let arraySum: number = 0;
for (let i = 0; i<= arr.length - 1; i++) {
arraySum = arr[i] + arraySum;
}
return arraySum;
}
我这样做了,它对总和的计数很好,但是,编译器错误很少:
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'.
No index signature with a parameter of type 'string' was found on type '{}'.
Argument of type 'any' is not assignable to parameter of type 'never'.
第一个是字符串:
const value: any = obj[key];
当第二个指的是:
r.push(value)
我有点困惑,因为如果我用 node 运行编译的 JS 文件,它会正确计算总和,但是它确实指向这两个错误。
另一方面,我无法使用 recursiveNumberSearch 方法推送 justNumbers 数组。
【问题讨论】:
标签: javascript arrays typescript recursion