【问题标题】:Transform Json data from ajax request从 ajax 请求转换 Json 数据
【发布时间】:2019-03-18 11:34:33
【问题描述】:

我是 JS 和 React 的新手。我从一个看起来像这样的 ajax 得到一个 json 对象:

{     "resultData": [
    {
        "modulname": "Physics",
        "passed": "passed",
        "not passed": "",
    },
    {
        "course": "Physics",
        "passed": "",
        "not passed": "not passed",
    },
    {
        "course": "English",
        "passed": "",
        "not passed": "not passed",
    },
        "course": "English",
        "passed": "",
        "not passed": "not passed",
    },
    ...

我不知道这个数组将包含多少个对象以及会有哪些课程。另外我想计算通过课程的人数。 我的目标是获得一个像这样的对象数组,我可以在其中映射并创建反应元素:

results [
        {
           course: "Physics",
           passed: "50%"
        },
        {
           course: "English"
           passed: "65%"
        },
        ...
        ]

如何找到一个好的解决方案?

【问题讨论】:

  • 请分享您到目前为止尝试或想到的内容。

标签: javascript arrays reactjs


【解决方案1】:

您可以使用reduce 收集数据并映射它们然后进行打印:

var res = {
  "resultData": [
    {
        "course": "Physics",
        "passed": "passed",
        "not passed": "",
    },
    {
        "course": "Physics",
        "passed": "passed",
        "not passed": "",
    },
    {
        "course": "Physics",
        "passed": "",
        "not passed": "not passed",
    },
    {
        "course": "English",
        "passed": "",
        "not passed": "not passed",
    },
    {
        "course": "English",
        "passed": "passed",
        "not passed": "",
    }
  ]
}

var result = res.resultData.reduce((acc, curr) => {
    var found = acc.find(x => x.course === curr.course);
    var passed = curr.passed && 1 || 0;
    var notpassed = curr["not passed"] && 1 || 0;
    if (found) {
        found.passed += passed;
        found.notpassed += notpassed;
    } else {
        acc.push({ course: curr.course, passed: passed, notpassed: notpassed });
    }
    return acc;
}, [])
.map(function(r) { return { course: r.course, passed: Math.round((r.passed / (r.passed + r.notpassed) * 100)) + "%" }; });

console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2021-08-29
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多