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

时间:2020-10-27 12:00:46

标签: javascript typescript

我有两个数组a和b

我想基于数组remarks的最新delivery_status,将数组a的{​​{1}}和b附加到数组created_date_time。 / p>

a应该用作比较参数。因为这是两个数组中的公共字段

该怎么做?

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

2 个答案:

答案 0 :(得分:1)

因此,听起来好像您只想将A的一部分附加到B上,前提是它们具有相同的created_date_time,然后只想将最新的created_date_time附加到A。

一种方法是:

  1. find(最新日期在前)的订单A
  2. 通过B循环
  3. 对于B中的每个项目,请在A上使用delivery_status方法以获取与当前B条目具有相同po_number的条目
  4. 从A中找到的项目中提取remarksa.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条目中

代码:

po_num: 1125

值得注意的是,在您的预期输出示例中,带有remarks: test_1的b具有created_date_time,这不是A中带有最新remarks: asd的1125。我认为应该改为a.sort((x, y) => x.created_date_time.localeCompare(y.created_date_time));

如果您确实希望此代码获得预期的答案,请将我的第一行代码更改为:"ClientDataRepositoryConfiguration": { "CollectionName": "ClientData", "ConnectionString": "mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true", "DatabaseName": "ClientData" }, (将sortFunction中的y和x切换为return)

还值得注意的是,如果您期望A真的很长,则可能有更有效的方法来跳过排序步骤并使用其他数据结构来实现此目的。

希望这对您有所帮助!

答案 1 :(得分:0)

为您提供提示,以便您可以尝试一下。

您可以实例化地图,然后在数组a上循环以将po_number作为键,并将deliver_statuscreated_dateremarks添加到对象中作为值。如果该值已经存在,则比较创建的日期,如果已添加的日期较少,则替换地图中的值。然后在数组b上循环到并从映射中获取po_num的值,将映射值中的deliver_statusremarks添加到数组b的项中。

您可以使用Array的reduce方法遍历Array a并生成映射。对于数组b,可以使用数组的map方法。