首页 > 解决方案 > 结合关系javascript对象

问题描述

我有两个这样的对象,

let tables=[{
    "KEY_ID": "T01",
    "KEY_NAME": "TABLE 1",
    "SITE_ID": "JKT"
}, {
    "KEY_ID": "T02",
    "KEY_NAME": "TABLE 2",
    "SITE_ID": "JKT"
}, {
    "KEY_ID": "T03",
    "KEY_NAME": "TABLE 3",
    "SITE_ID": "JKT"
}];

let orders = [{
        "KEY_ID": "T01",
        "ORDER_ID": "BL/RK/D0000004",
        "STATUS_DATA": 1
    }, {
        "KEY_ID": "T01",
        "ORDER_ID": "BL/RK/D0000005",
        "STATUS_DATA": 1
    }, {
        "KEY_ID": "T03",
        "ORDER_ID": "BL/RK/D0000018",
        "STATUS_DATA": 1
    }]; 

我想将订单组合到像这个 Tabel Orders 对象这样的表对象,该怎么做?我可以使用地图功能或其他东西吗?我知道可能我必须循环太多,但没关系,不用担心性能。抱歉,我无法为结果嵌入图像或代码

标签: javascriptarraysjson

解决方案


您可以从订单中查找并通过它填充表格数组,依赖于Array.reduce一个普通的for..of循环。这个例子假设key_id是唯一的。

let tables=[{
    "KEY_ID": "T01",
    "KEY_NAME": "TABLE 1",
    "SITE_ID": "JKT"
}, {
    "KEY_ID": "T02",
    "KEY_NAME": "TABLE 2",
    "SITE_ID": "JKT"
}, {
    "KEY_ID": "T03",
    "KEY_NAME": "TABLE 3",
    "SITE_ID": "JKT"
}], orders = [{
    "KEY_ID": "T01",
    "ORDER_ID": "BL/RK/D0000004",
    "STATUS_DATA": 1
}, {
    "KEY_ID": "T01",
    "ORDER_ID": "BL/RK/D0000005",
    "STATUS_DATA": 1
}, {
    "KEY_ID": "T03",
    "ORDER_ID": "BL/RK/D0000018",
    "STATUS_DATA": 1
}];

const ordersMap = orders.reduce((acc, next) => {
  if (!acc[next.KEY_ID]) acc[next.KEY_ID] = { orders: [] };
  acc[next.KEY_ID].orders.push(next);
  return acc;
}, {});

for (let table of tables) {
  table.orders = (ordersMap[table.KEY_ID] || {}).orders || [];
}
console.log(tables);


推荐阅读