Stupid Question on Reducing Results - Operator '+' cannot be applied

Topic Labels: Scripting extentions
1468 2
Showing results for 
Search instead for 
Did you mean: 
4 - Data Explorer
4 - Data Explorer

I have a column “Win or Loss” that is a 0 or 1. It is the result of a formula in the Table. I would like to filter a result set to a certain number of rows in that table, which is working, and then sum the “Win or Loss” column. I figure this can be done with a reduce function. In this function which I call for each player, the goal is to calculate how many wins they have:

function getPlayerStats(player){

    let myGames = query.records.filter(record=>record.getCellValueAsString("Player")==player)
    let total_games=output.text(myGames.length);
    let total_wins = myGames.reduce((total,record)=>total + record.getCellValue("Win or Loss"));


The output for total_wins ends up being something like this:
[object Object]011
when it really should be 3 - it is concatenating the 1s but not summing them, and missing the first one for some reason. I am new to Javascript and so I figure I am missing something obvious. The warning message is

“Operator ‘+’ cannot be applied to types ‘Games_Players_RolesTable_Record’ and ‘number’.”

which explains why this is wierd, but I can’t figure out the right way to do it. Any pointers would be appreciated. Thank you!

2 Replies 2

Hi @BRD529 - I think the issue here is that your reduce function is acting upon an array of objects, rather than just an array. From Mozilla:

Screenshot 2020-04-30 at 16.09.34

the reduce function needs an initial value in this case.

A slightly different set-up, but this script works:

let table = base.getTable("Table 1");
let results = await table.selectRecordsAsync();


let total_wins = results.records.reduce( ( sum, record ) => sum + record.getCellValue('Score'), 0);

notice the “0” initial value at the end of the reduce function.


4 - Data Explorer
4 - Data Explorer

That was it! Thanks so much for the assist.