我有一个对象数组,它引用了它的集合
const data = [{
id: 1,
name: 'A',
referer_id: null,
point: 4
},
{
id: 2,
name: 'B',
referer_id: 1,
point: 100
},
{
id: 3,
name: 'C',
referer_id: null,
point: 4
},
{
id: 4,
name: 'D',
referer_id: 1,
point: 2
},
{
id: 5,
name: 'E',
referer_id: null,
point: 4
},
{
id: 6,
name: 'F',
referer_id: null,
point: 4
},
{
id: 7,
name: 'G',
referer_id: 2,
point: 4
},
];
referer id 将引用该 id。我还有另一个数字数组用于计算点
const pointsByLevel = [0.5, 0.3, 0.2]; // this would be dynamic from database
截至目前,我可以像这样得到所有总数的总和
function getPoint(user_id) {
const mainUserPoint = data.find((u) => u.id === user_id).point;
let sum = 0;
for (let subdep of data.filter((d) => d.referer_id === user_id)) {
sum += getPoint(subdep.id);
}
return mainUserPoint + sum;
}
但真正的挑战是第一级应该只返回点数,但之后点数将根据pointsByLevel索引乘以
所以输出会是这样的
console.log(getPoint(1));
/**
A - 4
B D - [100 * 0.5], [2 * 0.5]
G - [4 * 0.3]
**/
// 4 + 50 + 1 + 1.2 = 56.2
所以最终结果我会得到 56.2
最有效的方法是什么
皈依舞
相关分类