首页 > 解决方案 > 根据其最新日期过滤数组响应中的单个值

问题描述

我有两个数组 a 和 b

我想根据最新的数组将数组的remarksand附加到数组中。delivery_statusabcreated_date_timea

po_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"
    }]

标签: javascripttypescript

解决方案


所以听起来你只想将 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: 1125has remarks: test_1,这不是 A 中最新created_date_time为 1125 的条目。我相信它应该是remarks: asd

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

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

希望这有帮助!


推荐阅读