首页 > 解决方案 > 使用函数式编程连接两个 JSON 对象数组,例如 SQL 连接

问题描述

考虑一下,我有以下两个对象数组:

const existingAndArchivedBookings = 
[
 {"booking_id":-2},
 {"booking_id":-1},
 {"booking_id":999}
]

const newAndExistingBookings = 
[
 {bookingId:-2, name: "name1"}, 
 {bookingId:-3, name: "name1"}, 
 {bookingId:-1, name: "namex"}
]

我想要做的是确定第二个数组中哪些预订是新的,哪些是现有的。两个数组中的任何 bookingId 都存在。第二个数组中但不是第一个数组中的任何 bookingID 都是新的。因此,解决方案的结果应该是一个数组,如下所示:

[ { bookingId: -2, existing: true, name: 'name1' },
  { bookingId: -3, existing: false, name: 'name1' },
  { bookingId: -1, existing: true, name: 'namex' } ]

我有一个解决方案(我将作为答案发布),但我认为可能有一种更有效的方法。祝你好运。

标签: javascriptfunctional-programmingramda.js

解决方案


如果您想要一个非 R 答案:您可以使用 simplemap来迭代数据,比较两个数组中的预订 ID(带有some),并返回一个新的对象数组。

const existingAndArchivedBookings = [{booking_id:-2},{booking_id:-1},{booking_id:999}];
const newAndExistingBookings = [{bookingId:-2, name: "name1"},{bookingId:-3, name: "name1"},{bookingId:-1, name: "namex"}];

function testBookings(arr1, arr2) {
  return arr2.map(({ bookingId, name }) => {
    const existing = arr1.some(obj => obj.booking_id === bookingId);
    return { bookingId, existing, name };
  });
}

const out = testBookings(existingAndArchivedBookings, newAndExistingBookings);

console.log(out);


推荐阅读