首页 > 解决方案 > 查找列表组的金额总和

问题描述

我是 Reactjs 的新手。

我有以下数据

Name        Amount

Poorna     11000.00

Kumar       2900.00

Ashok       20000.00

Kumar      3020.00

Poorna     15000.00

输出应如下所示

Name        Amount

Poorna     26000.00

Kumar       5920.00

Ashok       20000.00 

请帮我。

标签: javascriptreactjs

解决方案


这是您可以根据名称对数据进行分组的方式:

let data = [
  {name: "Poorna", salary:11000.0},
  {name: "Kumar",salary: 2900.0},
  {name: "Ashok", salary:20000.0},
  {name: "Kumar", salary:3020.0},
  {name: "Poorna", salary:15000.0},
];

let sol = {};

for (let a of data) {
  if (sol[a.name]) {
sol[a.name] += a.salary;
  } else {
sol[a.name] = a.salary;
  }
}

console.log(sol);

这是完整的反应应用程序:

在此处输入图像描述

import React, { useState, useEffect } from "react";
import "./style.css";
let data = [
  { name: "Poorna", salary: 11000.0 },
  { name: "Kumar", salary: 2900.0 },
  { name: "Ashok", salary: 20000.0 },
  { name: "Kumar", salary: 3020.0 },
  { name: "Poorna", salary: 15000.0 }
];
export default function App() {
  const [initialData, setInitialData] = useState(data);
  const [group, setGroup] = useState([]);

  const groupData = () => {
    let sol = {};

    for (let a of initialData) {
      if (sol[a.name]) {
        sol[a.name] += a.salary;
      } else {
        sol[a.name] = a.salary;
      }
    }
    setGroup(sol);
  };

  useEffect(() => {
    groupData();
  }, []);

  return (
    <div>
      <table>
        <tr>
          {" "}
          <th>Name</th>
          <th>Amount</th>
        </tr>
        {initialData.map(d => (
          <tr>
            {" "}
            <td>{d.name}</td>
            <td>{d.salary}</td>
          </tr>
        ))}
      </table>
      <h2>Grouped data</h2>
      <table>
        <tr>
          <th>Name</th>
          <th>Amount</th>
        </tr>
        {group &&
          Object.keys(group).map(key => (
            <tr>
              <td>{key}</td>
              <td>{group[key]}</td>
            </tr>
          ))}
      </table>
    </div>
  );
}

你可以在这里找到工作应用程序:Stackblitz Link


推荐阅读