对象数组检查是否相等并相应放置

时间:2019-07-12 11:27:11

标签: javascript

我有一个非常有趣的问题,想听听您会采取的一些方法。

场景:

32个玩家组成的锦标赛,每个玩家都由一组对象组成,例如:

[
  { player: 'Badgy', points: 5, place: tba, reward: 0 },
  { player: 'Ceff', points: 5, place: tba, reward: 0},
  { player: 'Niclas', points: 10, place: tba, reward: 0}
]

现在为每个热门地点定义了价格,例如:

1 Place = 100 Coins
2 Place = 50 Coins
3 Place = 10 Coins

现在在此示例中,'Ceff'和'Badgy'具有相同的点数,这意味着它们都必须位于第2位并获得(place2 + place3) / 2的奖励,在此示例中,他们每个人将获得30个硬币。

现在我尝试了一下,但是我很难找到一种解决方案,特别是如果发生3条以上的平局。

1 个答案:

答案 0 :(得分:0)

您可以为找到的第一个相同点的组取一个总和和一个索引,最后一个相同组的取平均值。

var prices = [100, 50, 20, 15, 10,  5,  2,  1],
    points = [ 20, 10, 10,  5,  5,  5,  4,  3],
    sum = 0,
    index,
    profit = points.reduce((r, v, i, { [i - 1]: last }) => {
        if (last !== v) {
            sum = 0;
            index = i;
        }
        sum += prices[i];
        var avg = sum / (i - index + 1);
        while (i >= index) r[i--] = avg;
        return r;
    }, []);

console.log(profit);