如何获得对象数组中的最大值 [英] How to get max of in array of objects

查看:47
本文介绍了如何获得对象数组中的最大值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试总结一个 JSON

var 数据 = [{客户名称:客户 1",客户 ID:1234",发票:[{id:647549",交易 ID:INV01",日期:10/12/2020",借:371.93,截止日期:09/02/2021"}],信用备忘录:[]},{客户名称:客户 5",客户 ID:5678",发票:[{id:631109",交易 ID:INV05",日期:09/12/2020",借方:206.92,截止日期:08/02/2021"},{id:664359",交易 ID:INV06",日期:11/12/2020",借方:91.91,截止日期:10/02/2021";}],信用备忘录:[]}];

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

//console.log(data.length);var data2 = [];for(让数据中的值){console.log(data[value].customerName);//console.log(data[value]);无功发票 = [];发票.推送(数据[值].发票[0]);//控制台日志(1);//console.log(客户);/* var max = 新日期(Math.max.apply(空值,客户.地图(功能(o){var dateString = o.dueDate;var dateParts = dateString.split("/");var dateObject = 新日期(+日期部分[2],日期部分[1] - 1,+日期部分[0]);返回新日期(日期对象);})));*/变量结果 = [发票.reduce((acc, n) => {for (var prop in n) {console.log("prop: " + prop);如果(道具 ===借方"){如果 (acc[prop]) {acc[prop] += n[prop];console.log(OK");} 别的 {acc[prop] = n[prop];}} else if (prop === "dueDate") {//acc[prop] = max;} 别的 {acc[prop] = n[prop];}}返回acc;}, {})];data2.push(result);}控制台日志(数据2);

我想得到以下结果,将每个客户的发票的所有借项相加,获得每个客户的最大日期(我没有找到删除空财产 creditmemo 的方法

<预><代码>[{客户名称:客户 1",客户 ID:1234",发票:[{id:647549",交易 ID:INV01",日期:10/12/2020",借:371.93,截止日期:09/02/2021"}]},{客户名称:客户 5",客户 ID:5678",发票:[{id:631109-664359",交易 ID:INV05-INV06",日期:11/12/2020",借:298.83,截止日期:08/02/2021"}}];

解决方案

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

我同意评论者关于将多个 id 属性存储在数组中而不是串联字符串的观点——既是为了以后使用,也是为了简化重构.

const summary = data.map(({ customerName, customerId, invoices }) => {const debitSummary = invoices.reduce((acc, inv, i) => {如果我) {acc = {...acc,id: acc.id + '-' + inv.id,交易 ID:acc.transactionId + '-' + inv.transactionId,借记:acc.debit + inv.debit,日期:新日期(inv.date)>新日期(acc.date)?inv.date : acc.date,}}返回acc;}, 发票[0]);return { customerName, customerId, invoices: [{...debitSummary}] };});console.log(summary);

.as-console-wrapper { max-height: 100% !important;顶部:0;}





        
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆