如何基于公共键组合两个 JavaScript 数组,类似于 SQL JOIN
在 JavaScript 中处理数据时,您可以遇到这样的情况:您有多个包含相关信息的数组,并且您希望根据公共属性将它们组合起来。在这种情况下,SQL JOIN 操作对于合并来自多个表的数据非常有用,我们可以使用数组操作技术在 JavaScript 中实现类似的功能。
假设我们有两个数组:userProfiles 和 questions。 userProfiles 包含具有 id 和 name 属性的对象,而 questions 包含具有 id、text 和createdBy 属性的对象。问题中的createdBy属性对应于userProfiles中的id值。
我们的目标是“连接”这些数组以创建一个新数组,其中包含具有id、text和name属性的对象。在 SQL 中,此操作将由以下查询表示:
SELECT u.id, q.text, u.name FROM userProfiles u JOIN questions q ON q.createdBy=u.id
在 JavaScript 中,我们可以使用 reduce() 和 concat() 方法实现联接。下面是一个使用innerJoin函数的例子:
const innerJoin = (xs, ys, sel) => xs.reduce((zs, x) => ys.reduce((zs, y) => // cartesian product - all combinations zs.concat(sel(x, y) || []), // filter out the rows and columns you want zs), []);
使用这个函数,我们可以执行如下连接:
const result = innerJoin(userProfiles, questions, ({id: uid, name}, {id, text, createdBy}) => createdBy === uid && {id, text, name});
这个innerJoin函数本质上执行两个数组的笛卡尔积,并且对于每对对象,它检查问题中的createdBy属性是否与userProfiles中的id属性匹配。如果它们匹配,它将返回具有所需属性的对象。
生成的结果数组将包含以下格式的对象:
{ id, text, name }
此方法允许您组合来自多个数组的数据基于公共键,类似于 SQL JOIN 操作。通过利用 JavaScript 的数组操作功能,您可以为您的应用程序实现高效、灵活的数据转换。
以上是如何在两个 JavaScript 数组上执行类似 SQL 的 JOIN?的详细内容。更多信息请关注PHP中文网其他相关文章!