【问题标题】:Group the data in an array and get the sum from the array of object values将数据分组到一个数组中,并从对象值数组中获取总和
【发布时间】:2020-11-13 03:31:54
【问题描述】:

我是 react 和 javascript 的新手。这里我尝试使用 lodsh 函数。

我有一个对象数组,看起来像,

const data = [{
"Id": "1",
          "testone": 100,
          "test": 40,
          "Original": {
            "Id": "11"
          },
          "__Parent__": {
            "Id": "20",
            "Status": "INP"
          }
}, {
"Id": "2",
          "testone": 120,
          "test": 20,
          "Original": {
            "Id": "10"
          },
          "__Parent__": {
            "Id": "21",
            "Status": "Book"
          }
},{
"Id": "3",
          "testone": 110,
          "test": 140,
          "Original": {
            "Id": "11"
          },
          "__Parent__": {
            "Id": "20",
            "Status": "INP"
          }
}, {
"Id": "4",
          "testone": 100,
          "test": 40,
          "Original": {
            "Id": "11"
          },
          "__Parent__": {
            "Id": "20",
            "Status": "Val"
          }
}]

在这里,我有一个具有产品 ID 的函数。我从另一个函数传递的 =>

cont value = (PID, data) => {
    
 
}

所以,这个函数,

我需要 sum ,首先我需要获取所有与 PID 具有相同 ID 的对象。来自对象的 ID 为 Original.ID。如果这些匹配,那么在那之后,我需要检查该对象的状态,例如,状态是INP or BOOK,那么求和需要采用

testone key value or else need to take the `test` key value.

所以,在给定的例子中,它会像,

Id 是 11,它被传递给一个函数,并在给定的对象中匹配 3 个对象。

现在,

返回 sum 时会是这样,

100 + 100 + 40 which will be 240.

那么,我该怎么做。谢谢。

【问题讨论】:

  • 您可以使用data.filter(item) => item.Original.Id === PID 获取具有匹配PIDS 的项目数组。然后您可以在结果数组上使用map 函数来执行求和逻辑。

标签: javascript lodash


【解决方案1】:

如果您支持 IE9 及更高版本,我认为最好使用 Array.reduce

const sum = data.reduce((total, item) => {
    if (item.Original.Id !== PID) return total;

    const { status, testone, test } = item;
    let addition = 0;

    if (status === "INP") addition = testone;
    else if (status === "BOOK") addition = test;
    
    return total + addition;
}, 0);

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多