You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过for循环将SQLite查询返回的多组数组合并为单个数组

如何将SQLite多次循环查询的结果合并为单一对象数组

最优方案:使用IN子句一次性查询

没必要循环执行多次SELECT,这会增加数据库交互开销。直接用IN子句一次性查询所有目标dataID,然后将结果统一整理到一个数组中:

db.transaction(tx => {
  // 将emparray转换为适合IN子句的参数数组
  const ids = emparray.map(id => id.toString());
  // 构造匹配参数数量的占位符字符串
  const placeholders = ids.map(() => '?').join(',');
  tx.executeSql(
    `SELECT * FROM database WHERE dataID IN (${placeholders})`,
    ids,
    (tx, res) => {
      const mergedResults = [];
      for (let i = 0; i < res.rows.length; i++) {
        mergedResults.push(res.rows.item(i));
      }
      console.log(mergedResults); // 输出合并后的完整数组
    }
  );
});

若需保留循环查询:收集结果并处理异步

如果因业务限制必须循环执行查询,可在外层定义数组收集所有结果,同时用Promise处理异步完成后的统一输出:

// 外层定义用于收集所有结果的数组
const mergedResults = [];
// 用Promise数组跟踪所有异步查询
const queryPromises = [];

db.transaction(tx => {
  for (let j = 0; j < emparray.length; j++) {
    const queryPromise = new Promise((resolve) => {
      tx.executeSql(
        `SELECT * FROM database WHERE dataID =?`,
        [emparray[j].toString()],
        (tx, res) => {
          const temp = [];
          for (let i = 0; i < res.rows.length; i++) {
            temp.push(res.rows.item(i));
          }
          // 将当前查询结果合并到总数组
          mergedResults.push(...temp);
          resolve();
        }
      );
    });
    queryPromises.push(queryPromise);
  }
});

// 等待所有查询完成后输出最终合并结果
Promise.all(queryPromises).then(() => {
  console.log(mergedResults);
});

说明:第一种方案效率更高,减少了数据库交互次数,推荐优先使用;第二种方案适用于必须循环查询的场景,通过Promise.all确保所有异步操作完成后再输出结果。

内容的提问来源于stack exchange,提问作者anu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:12:59