首页 > 数据库 >JavaScript 实现类似SQL 左联接式的对象数组合并

JavaScript 实现类似SQL 左联接式的对象数组合并

时间:2024-02-06 16:03:06浏览次数:28  
标签:table2 table1 const name JavaScript 合并 数组 SQL id

在 JavaScript 中,你可以使用对象合并(Object merging)来模拟数据库的左联接操作。左联接操作会将两个对象的特定属性进行合并,类似于 SQL 中的 LEFT JOIN 操作。

假设你有两个对象,每个对象代表一个表:

const table1 = [
  { id: 1, age: 30 },
  { id: 3, age: 25 },
];

const table2 = [
  { id: 1, name: "Alice" },
  { id: 2, name: "Bob" },
  { id: 3, name: "Charlie" },
];

你可以通过以下代码实现类似数据库左联接的对象合并:

function leftJoin(table1, table2, key) {
  const result = [];

  table1.forEach((row1) => {
    const matchingRows = table2.filter((row2) => row1[key] === row2[key]);
    if (matchingRows.length > 0) {
      matchingRows.forEach((matchingRow) => {
        result.push({ ...row1, ...matchingRow });
      });
    } else {
      result.push({ ...row1 });
    }
  });

  return result;
}

const mergedTable = leftJoin(table1, table2, "id");
console.log(mergedTable);

打印结果:

[
  { id: 1, age: 30, name: "Alice" },
  { id: 3, age: 25, name: "Charlie" },
];

这段代码会将 table1table2 进行左联接操作,以 id 属性为键进行合并。合并后的结果存储在 mergedTable 数组中,并输出到控制台。

这里的 leftJoin 函数接受三个参数:两个表格的数组以及用来匹配的键名。它遍历第一个表格的每一行,并在第二个表格中查找匹配的行。如果找到匹配的行,则将两行合并为一个新的对象,然后将其添加到结果数组中。如果没有找到匹配的行,则仅将第一个表格中的行添加到结果数组中。

标签:table2,table1,const,name,JavaScript,合并,数组,SQL,id
From: https://www.cnblogs.com/yuzhihui/p/18009837

相关文章

  • SpringBoot集成Flink-CDC 采集PostgreSQL变更数据发布到Kafka
    (之前写了一个flink-cdc同步数据的博客,发布在某N,最近代码开源了,直接复制过来了,懒得重新写了,将就着看下吧)最近做的一个项目,使用的是pg数据库,公司没有成熟的DCD组件,为了实现数据变更消息发布的功能,我使用SpringBoot集成Flink-CDC采集PostgreSQL变更数据发布到Kafka。 一、业务......
  • Hive:构建于 Hadoop 之上、让你像写 SQL 一样编写 MapReduce 程序
    Hive介绍本次我们来聊一聊Hive,它是由Facebook开源的一款基于Hadoop的数据仓库工具,用于解决海量结构化日志的数据统计与分析。Hive通过将结构化的数据映射为一张表,并提供类SQL查询功能,让开发人员能够编写SQL进行数据分析。在介绍Hadoop的时候我们说过,使用MapReduce......
  • navicat连接mysql服务遇到的问题
    问题现象及描述:navicat连接数据库提示:2003-Can'tconnecttoMySqlserveron'192.168.245.131',(unkownerror)问题可能出现的原因:1、数据库连接ip、端口、用户名、密码信息输入错误(数据库连接四要素)2、该用户不可远程连接3、linux防火墙未开放解决方式数据库连接ip问题:......
  • ksqltest
    第三方都是水电费是的 水电费水电费是的防守使用localsocket方式登录数据库[kingbase@node1~]$ksql-dtest-Usystem使用TCP/IP方式登录数据库[kingbase@node1~]$ksql-h192.168.40.111-p54321-dtest-Usystem使用连接串方式登录数据库[kingbase@n......
  • 【CPL-2023】W4 W5笔记-循环、多维数组
    编码练习选择排序冒泡排序二分法 循环多维数组标量:保存单一数据项聚合变量:存储成组的数据:数组,结构体数组检查下标是否越界地址消除器--检查地址取值时是否合法在同一个表达式中对i同时有取值操作和++操作,不同编译器有可能行为不一致,所以不建议这么写i......
  • 【CPL-2023】W3笔记-条件、循环、数组
    分支结构程序的生存期if();等价于if(){  ;}级联ifif(){}elseif(){}elseif(){}else{}关系运算符优先级低于算术运算符判等运算符优先级低于关系运算符多出口程序不容易调试(if多个分支中多个pritf类似这种程序)可以调整多出口程序为单出口......
  • SQL数据库入门04:数据查询操作
      本文介绍基于MicrosoftSQLServer软件,实现数据库表中多种数据查询方法的具体操作。(数据库基础(四):数据查询)  系列文章中示例数据来源于《SQLServer实验指导(2005版)》一书。依据本系列文章的思想与对操作步骤、代码的详细解释,大家用自己手头的数据,可以将相关操作与分析过程......
  • 代码随想录算法训练营第十三天 | 59.螺旋矩阵II 209.长度最小的子数组 977.有序数
    977.有序数组的平方 已解答简单 相关标签相关企业 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16......
  • 【源码日记】了解 PLpgSQL_datum
    basedonpostgrescommitb96115acb8a0e08a46877c2b8ef2a7b5560b371bTheSQLCREATEORREPLACEFUNCTIONdemo_fors()RETURNSVOIDAS$$DECLAREaRECORD;BEGINFORaINSELECT*FROMsome_tableLOOPRAISENOTICE'id:%,name:%',a.id,a.nam......
  • MySQL-进阶
    一、MySQL体系结构1.连接层:一些客户端和连接服务,完成连接处理、授权认证及相关操作2.服务层:完成大多数核心服务的功能,比如SQL的分析和优化3.引擎层:负责MySQL中数据的存储和提取4.存储层:数据存储层,将数据存储在文件系统上,并完成与存储引擎的交互二、存储引擎(MySQL的核心)1.定......