为了账号安全,请及时绑定邮箱和手机立即绑定

根据最新日期过滤数组响应中的单个值

根据最新日期过滤数组响应中的单个值

LEATH 2023-06-15 09:35:55
我有两个数组 a 和 b我想根据最新的数组将数组的remarks和附加到数组。delivery_statusabcreated_date_timeapo_number应该用作比较参数。因为它是两个数组中的公共字段这个怎么做?a=[{    actual_delivery_date: "2020-10-22"    created_date_time: "2020-10-24T22:18:29Z"    delivery_status: "Delivered"    id: 16    po_number: 1125    remarks: "test"    user: "pruser5"},{    actual_delivery_date: "2020-10-22"    created_date_time: "2020-10-24T22:18:29Z"    delivery_status: "Delivered"    id: 16    po_number: 1124    remarks: "test1"    user: "pruser5"},{    actual_delivery_date: "2020-10-29",    created_date_time: "2020-10-24T23:02:05Z",    delivery_status: "Late",    id: 22,    po_number: 1125,    remarks: "asd",    user: "pruser7"}]    b= [{        po_num: 1125,        priority: "Medium",        processId: "30820307",        },        {        po_num: 1124,        priority: "Large",        processId: "30820308",    }]我想要的输出,b= [{        po_num: 1125,        priority: "Medium",        processId: "30820307",        delivery_status: "Delivered",        remarks: "test"        },        {        po_num: 1124,        priority: "Large",        processId: "30820308",        delivery_status: "Late",        remarks: "asd"    }]
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

所以听起来你只想将 A 的部分附加到 B 上,如果首先,它们具有相同的po_number,然后你只想附加最新的created_date_time.

一种方法是:

  1. created_date_time在(最迟日期在前)之前订购 A

  2. 循环 B

  3. 对于B中的每一项,使用findA上的方法获取与当前B条目po_number相同的条目

  4. 从A中找到的item中拉出delivery_statusand remarks,添加到当前B表项中

代码:

a.sort((x, y) => y.created_date_time.localeCompare(x.created_date_time));

for (const bEntry of b) {

  const matchedEntryA = a.find(aEntry => bEntry.po_num === aEntry.po_number);

  if (matchedEntryA) {

    bEntry.delivery_status = matchedEntryA.delivery_status;

    bEntry.remarks = matchedEntryA.remarks;

  }

}

值得注意的是,在您预期的输出示例中, b with po_num: 1125hasremarks: test_1不是 A 中的条目 with the latest created_date_timefor 1125。我相信它应该是remarks: asd。


如果您确实希望此代码获得预期的答案,请将我的第一行代码更改为:(a.sort((x, y) => x.created_date_time.localeCompare(y.created_date_time));在排序 compareFunction 返回中切换 y 和 x)


还值得注意的是,如果您希望 A 非常长,则可以通过跳过排序步骤并使用不同的数据结构来实现更有效的方法。


希望这有帮助!


查看完整回答
反对 回复 2023-06-15
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

为您提供提示,以便您可以自己尝试。

您可以实例化一个地图,然后遍历 Arraya以添加po_number作为键和deliver_statuscreated_dateremarks在对象中作为值。如果该值已经存在,则比较创建日期,如果已添加的日期较小,则替换地图中的值。然后遍历 Array to 并从地图中b获取值,将和from 地图值添加到 Array 的项目。po_numdeliver_statusremarksb

您可以使用 Array 的reduce方法迭代 Arraya并生成地图。对于 Array b,您可以使用 Array 的map方法。


查看完整回答
反对 回复 2023-06-15
  • 2 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信