【问题标题】:JSON to match key/values and get the total values for each keyJSON 匹配键/值并获取每个键的总值
【发布时间】:2021-08-11 10:04:55
【问题描述】:

我需要帮助从我创建的 api 中显示每个目标名称的总会话时间。我已经尝试过映射和减少,但只能获得总 sessionTime。

我希望结果是这样的:
学习意大利语:6
Parla con il mio amico in Italiano : 1

"records": [
    {
      "sessionTime": 1,
      "goalName": "Learn Italian",
      "timeStapmed": "10:08:23",
      "date": "11/08/2021",
      "id": 1
    },
    {
      "sessionTime": 5,
      "goalName": "Learn Italian",
      "id": "PFKFKZ",
      "timeStapmed": "10:14:48",
      "date": "11/08/2021"
    },
    {
      "sessionTime": 1,
      "goalName": "Parla con il mio amico in italiano",
      "id": "aP_g1-",
      "timeStapmed": "10:21:28",
      "date": "11/08/2021"
    }
  ]

【问题讨论】:

    标签: javascript arrays json mapreduce


    【解决方案1】:

    我认为您正在寻找 array#reduce 循环,

    records.reduce(
      (acc, { sessionTime, goalName }) =>
        acc?.[goalName]
          ? { ...acc, [goalName]: acc[goalName] + sessionTime }
          : { ...acc, [goalName]: sessionTime },
      {}
    );
    

    我们可以遍历每个对象并将它们的值的总和保存在 acc 变量中。

    完整代码:

    let records = [
      {
        sessionTime: 1,
        goalName: "Learn Italian",
        timeStapmed: "10:08:23",
        date: "11/08/2021",
        id: 1,
      },
      {
        sessionTime: 5,
        goalName: "Learn Italian",
        id: "PFKFKZ",
        timeStapmed: "10:14:48",
        date: "11/08/2021",
      },
      {
        sessionTime: 1,
        goalName: "Parla con il mio amico in italiano",
        id: "aP_g1-",
        timeStapmed: "10:21:28",
        date: "11/08/2021",
      },
    ];
    
    
    let newRecords = records.reduce((acc, {sessionTime, goalName}) => acc?.[goalName] ? {...acc, [goalName]: acc[goalName] + sessionTime} : {...acc, [goalName]: sessionTime}, {})
    
    console.log(newRecords)

    【讨论】:

      【解决方案2】:

      先尝试filter你要计算它们总和的元素。

      const learnItalianTotal = records.filter(elm => elm.goalName === "Learn Italian")
      .reduce((acc, cur) => acc.sessionTime + cur.sessionTime);
      

      【讨论】:

        【解决方案3】:

        试试这个

        const records = [
            {
                sessionTime: 1,
                goalName: 'Learn Italian',
                timeStapmed: '10:08:23',
                date: '11/08/2021',
                id: 1
            },
            {
                sessionTime: 5,
                goalName: 'Learn Italian',
                id: 'PFKFKZ',
                timeStapmed: '10:14:48',
                date: '11/08/2021'
            },
            {
                sessionTime: 1,
                goalName: 'Parla con il mio amico in italiano',
                id: 'aP_g1-',
                timeStapmed: '10:21:28',
                date: '11/08/2021'
            }
        ];
        
        
        var result = records.reduce( ( accumulator, { sessionTime, goalName} ) => {
            accumulator[goalName] = accumulator[ goalName ] ? (accumulator[goalName] + sessionTime): sessionTime;
            return accumulator;
        }, {} );
        
        console.log(result);
        

        输出

        {
            "Learn Italian": 6,
            "Parla con il mio amico in italiano": 1
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多