如何在对象数组中获取最大值

科马甘

我正在尝试总结一个JSON

var data = [
  {
    customerName: "Customer1",
    customerId: "1234",
    invoices: [
      {
        id: "647549",
        transactionId: "INV01",
        date: "10/12/2020",
        debit: 371.93,
        dueDate: "09/02/2021"
      }
    ],
    creditmemo: []
  },
  {
    customerName: "Customer5",
    customerId: "5678",
    invoices: [
      {
        id: "631109",
        transactionId: "INV05",
        date: "09/12/2020",
        debit: 206.92,
        dueDate: "08/02/2021"
      },
      {
        id: "664359",
        transactionId: "INV06",
        date: "11/12/2020",
        debit: 91.91,
        dueDate: "10/02/2021"
      }
    ],
    creditmemo: []
  }
];

我尝试了几种方法,最新的一种:

//console.log(data.length);
var data2 = [];
for (let value in data) {
  console.log(data[value].customerName);
  //console.log(data[value]);
  var invoices = [];
  invoices.push(data[value].invoices[0]);
  //console.log(1);
  //console.log(customer);
  /* var max = new Date(
    Math.max.apply(
      null,
      customer.map(function (o) {
        var dateString = o.dueDate;
        var dateParts = dateString.split("/");
        var dateObject = new Date(
          +dateParts[2],
          dateParts[1] - 1,
          +dateParts[0]
        );
        return new Date(dateObject);
      })
    )
  );*/
  var result = [
    invoices.reduce((acc, n) => {
      for (var prop in n) {
        console.log("prop: " + prop);
        if (prop === "debit") {
          if (acc[prop]) {
            acc[prop] += n[prop];
            console.log("OK");
          } else {
            acc[prop] = n[prop];
          }
        } else if (prop === "dueDate") {
          //acc[prop] = max;
        } else {
          acc[prop] = n[prop];
        }
      }
      return acc;
    }, {})
  ];
  data2.push(result);
}
console.log(data2);

我想得到以下结果,求和每个客户的所有发票的总和,获得每个客户的最大日期(我没有找到一种方法来删除空资产creditmemo

[
  {
    customerName: "Customer1",
    customerId: "1234",
    invoices: [
      {
        id: "647549",
        transactionId: "INV01",
        date: "10/12/2020",
        debit: 371.93,
        dueDate: "09/02/2021"
      }
    ]
  },
  {
    customerName: "Customer5",
    customerId: "5678",
    invoices: [
      {
        id: "631109-664359",
        transactionId: "INV05-INV06",
        date: "11/12/2020",
        debit: 298.83,
        dueDate: "08/02/2021"
      }
  }
];
沙丁鱼

这是map()数据数组相当简单的方法,它带有嵌套reduce()调用以重构发票数组。invoices数组中的第一个元素作为初始累加器传递,并且只有在数组中有多个元素时才进行重构。由于我们在每次地图迭代时都返回一个新对象,因此我们可以简单地忽略该creditMemo属性。

我同意评论员的意见,即id在数组中存储多个属性,而不是在字符串中存储多个属性,以便以后使用和简化重构。

const summary = data.map(({ customerName, customerId, invoices }) => {
  const debitSummary = invoices.reduce((acc, inv, i) => {
    if (i) {
      acc = {
        ...acc,
        id: acc.id + '-' + inv.id,
        transactionId: acc.transactionId + '-' + inv.transactionId,
        debit: acc.debit + inv.debit,
        date: new Date(inv.date) > new Date(acc.date) ? inv.date : acc.date,
      }
    }
    return acc;
  }, invoices[0]);
  return { customerName, customerId, invoices: [{...debitSummary}] };
});

console.log(summary);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script>
const data = [{ customerName: "Customer1", customerId: "1234", invoices: [{ id: "647549", transactionId: "INV01", date: "10/12/2020", debit: 371.93, dueDate: "09/02/2021" }], creditmemo: [] }, { customerName: "Customer5", customerId: "5678", invoices: [{ id: "631109", transactionId: "INV05", date: "09/12/2020", debit: 206.92, dueDate: "08/02/2021" }, { id: "664359", transactionId: "INV06", date: "11/12/2020", debit: 91.91, dueDate: "10/02/2021" }], creditmemo: [] }];
</script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Swift对象数组中找到最大值?

来自分类Dev

从对象的数组列表中获取最大值?

来自分类Dev

如何在fortran中获取最大值的位置?

来自分类Dev

如何在对象数组中查找值

来自分类Dev

在对象数组中查找属性的最大值并返回整个对象

来自分类Dev

如何在PHP数组中获取具有最大值的数组

来自分类Dev

在对象数组中查找属性的最大值

来自分类Dev

如何在MongoDB中获取字段的最大值

来自分类Dev

如何在C#中获取二维数组列表的最大值/最小值

来自分类Dev

我如何从数组中获取4个最大值

来自分类Dev

如何在Ruby中获取数组第二列的最大值和总和

来自分类Dev

从对象的数组列表中获取最大值?

来自分类Dev

我如何使用Linq在对象列表中按小时获取最大值

来自分类Dev

在对象数组中查找最小值,最大值

来自分类Dev

如何在PHP中的内部数组元素中获取最大值

来自分类Dev

在JS中获取已过滤对象数组的最大值

来自分类Dev

如何在对象中获取数组对象

来自分类Dev

如何在MongoDB中获取字段的最大值

来自分类Dev

如何在MySQL中获取列的最大值

来自分类Dev

Javascript:根据数组过滤键后,在对象中查找具有最大值的键

来自分类Dev

在对象数组中获取键值的值

来自分类Dev

如何在数组对象中查找参数的最大值?

来自分类Dev

如何在Java中获取二维数组列表的最大值/最小值

来自分类Dev

如何从数组php获取最大值

来自分类Dev

NodeJS:Array.reduce 在对象数组中查找最小值和最大值

来自分类Dev

如何在 Python 中更改数组最大值

来自分类Dev

通过 id 从对象数组中获取属性的最大值

来自分类Dev

Javascript:找不到嵌套在对象中的数组的最大值

来自分类Dev

通过 ReactJs 在对象数组中查找最大值

Related 相关文章

  1. 1

    如何在Swift对象数组中找到最大值?

  2. 2

    从对象的数组列表中获取最大值?

  3. 3

    如何在fortran中获取最大值的位置?

  4. 4

    如何在对象数组中查找值

  5. 5

    在对象数组中查找属性的最大值并返回整个对象

  6. 6

    如何在PHP数组中获取具有最大值的数组

  7. 7

    在对象数组中查找属性的最大值

  8. 8

    如何在MongoDB中获取字段的最大值

  9. 9

    如何在C#中获取二维数组列表的最大值/最小值

  10. 10

    我如何从数组中获取4个最大值

  11. 11

    如何在Ruby中获取数组第二列的最大值和总和

  12. 12

    从对象的数组列表中获取最大值?

  13. 13

    我如何使用Linq在对象列表中按小时获取最大值

  14. 14

    在对象数组中查找最小值,最大值

  15. 15

    如何在PHP中的内部数组元素中获取最大值

  16. 16

    在JS中获取已过滤对象数组的最大值

  17. 17

    如何在对象中获取数组对象

  18. 18

    如何在MongoDB中获取字段的最大值

  19. 19

    如何在MySQL中获取列的最大值

  20. 20

    Javascript:根据数组过滤键后,在对象中查找具有最大值的键

  21. 21

    在对象数组中获取键值的值

  22. 22

    如何在数组对象中查找参数的最大值?

  23. 23

    如何在Java中获取二维数组列表的最大值/最小值

  24. 24

    如何从数组php获取最大值

  25. 25

    NodeJS:Array.reduce 在对象数组中查找最小值和最大值

  26. 26

    如何在 Python 中更改数组最大值

  27. 27

    通过 id 从对象数组中获取属性的最大值

  28. 28

    Javascript:找不到嵌套在对象中的数组的最大值

  29. 29

    通过 ReactJs 在对象数组中查找最大值

热门标签

归档