Reduce array of objects by user_id and sum certain values

前端 未结 3 1186
旧时难觅i
旧时难觅i 2021-01-22 17:57

I have an array of objects that looks like this:

\"data\": [
{ \"workout_id\": 1, \"user_id\": 1, \"shotLocation\": 27, \"shotAttempts\": 20,\"shotsMade\": 19,          


        
3条回答
  •  抹茶落季
    2021-01-22 18:19

    const data = [
      { workout_id: 1, user_id: 1, shotLocation: 27, shotAttempts: 20, shotsMade: 19, id: 1 },
      { workout_id: 2, user_id: 1, shotLocation: 1, shotAttempts: 10, shotsMade: 9, id: 2 },
      { workout_id: 2, user_id: 1, shotLocation: 10, shotAttempts: 10, shotsMade: 7, id: 3 },
      { workout_id: 2, user_id: 1, shotLocation: 1, shotAttempts: 30, shotsMade: 29, id: 4 },
      { workout_id: 3, user_id: 5, shotLocation: 1, shotAttempts: 10, shotsMade: 9, id: 5 },
      { workout_id: 4, user_id: 6, shotLocation: 1, shotAttempts: 30, shotsMade: 15, id: 6 },
      { workout_id: 4, user_id: 6, shotLocation: 2, shotAttempts: 20, shotsMade: 14, id: 7 }
    ];
    
    const shooters = data.reduce(
      (results, current) => ({
        ...results,
        [current.user_id]: {
          user_id: current.user_id,
          shotAttempts: current.shotAttempts + (results[current.user_id] ? results[current.user_id].shotAttempts : 0),
          shotsMade: current.shotsMade + (results[current.user_id] ? results[current.user_id].shotsMade : 0)
        }
      }),
      {}
    );
    
    console.log(shooters);

提交回复
热议问题