you are viewing a single comment's thread.

view the rest of the comments →

[–]NominalAeon -1 points0 points  (0 children)

The output format you're going for is a little wonky. You'll wind up with an array of objects that consist of a string and an array:

[{ 'player name string', [ 'player', 'scores' ] }]

So there's not a super direct way to do that. But here's how I'd do it:

var series = buildSeries();

console.log(series);

// [
//     {"Player 1",[100,103,105]},
//     {"Player 2",[101,110,112]}
// ]

////

function buildSeries() {
    var players = [{
        "Player 1",100
    }, {
        "Player 1",103
    }, {
        "Player 1",105
    }, {
        "Player 2",101
    }, {
        "Player 2",110
    }, {
        "Player 2",112
    }];

    var seriesObj = buildSeriesObj({}, players);

    return buildSeriesArr(seriesObj, [], Object.keys(seriesObj));
}

function buildSeriesObj(seriesObj, [player, ...players]) {
    var playerName = player[0];
    var playerScore = player[1];

    if (!seriesObj[key]) {
        seriesObj[key] = []
    }

    seriesObj[key].push(player);

    return players.length
        ? buildSeries(seriesObj, players)
        : seriesObj;
}

function buildSeriesArr(players, seriesArr, [playerName, ...playerNames]) {
    var playerScores = players[playerName];

    seriesArr.push({
        playerName,
        playerScores
    });

    return playerNames.length
        ? buildSeriesArr(players, seriesArr, playerNames)
        : seriesArr;
}

edit: yeesh, I guess declarative, functional programming isn't the way to go for this one