HarmonyOS:如何讲 Map 类型数据转化为valuesBucket(数据集)类型

前言:今天在开发数据库插入数据的过程中,发现之前的数据插入都是先将 json 数据转为 model,再将model 转为数据集,这样再往数据库里面存储的方式。今天开发过程中,发现需要被存储的数据是 Map 格式的,如果还按照原来的思路来处理,Map 数据------>Json 数据------>Model 对象------>ValuesBucket数据,再执行存储,相当于多了步骤,虽然也可以这么操作,但是对于我们来说,如果数据量比较大,就加大了处理器的负担,所以我直接将 Map 数据转为ValuesBucket数据,这样中间就节省了处理器的开支,并且成功存储数据。 下面是 Map 转ValuesBucket的方法:

typescript 复制代码
function mapToValuesBucket(map: Map<string, string | number | boolean>): ValuesBucket {
  let valuesBucket: ValuesBucket = {}
  map.forEach((value, key) => {
    valuesBucket[key] = value
  });
  return valuesBucket;
}

 const prodDisMap = new Map<string, string>();
 prodDisMap.set('name', '产品 1');
 prodDisMap.set('code', '00001');
 const valuesBucket = mapToValuesBucket(prodDisMap);
 console.info(`valuesBucket:${JSON.stringify(valuesBucket)}`)

我们项目中的存储数据库方法如下:

typescript 复制代码
function parseBaseStoreProductDisData(context: Context, jsonData: string, serverNode:string) {
  DatabaseManager.deleteTableDataByTabName(context,"base_store_prod_dis",serverNode);
  try {
    //整理数据
    //分销规则数组,暂时写死处理,后续再从登录数据获取
    let sepcList:string[] = ["drid", "pid", "dist", "pri", "inv", "aging", "disp", "sdisp", "cmpt", "oos", "mtd", "ord", "gofa", "item1", "item2", "item3", "item4", "item5", "item6", "item7", "item8", "item9", "item10", "genid"]
    //原始数据模型
    let originalStoreProDisList:BaseProductDisModel[] = JSON.parse(jsonData)[serverNode];
    let allProdDisList: Map<string,string>[] = []
    let parseProductDisList: ValuesBucket[] = [];
    //转为需要存储回显表的数据模型
    for (let i = 0; i < originalStoreProDisList.length; i++) {
      const valueBucket1: ValuesBucket = {}
      let element = originalStoreProDisList[i];
      let prodDisMap = new Map<string, string>();
      let pStr:string  = element.p as string;
      if (pStr!=undefined&&pStr.length>0) {
        let propertyList:string[] = pStr.split(',');
        for (let index = 0; index < propertyList.length; index++) {
          const columnValue:string = propertyList[index] as string;
          let columnName:string = '';
          if (sepcList.length > index) {
            columnName = sepcList[index] as string;
            if (columnName.length>0&&(columnName == 'sid' || columnName == 'drid' || columnName == 'drId')) {
              columnName = 'store_id'
            }else  if (columnName.length>0 && columnName =='pid'){
              columnName = 'prod_id'
            }
          }
          prodDisMap.set(columnName,columnValue);
        }
        if (element.gen_id&&element.gen_id.length>0) {
          prodDisMap.set('genid',element.gen_id);
        }
        if (serverNode&&serverNode.length>0){
          prodDisMap.set('server_node',serverNode);
        }
        if (prodDisMap) {
        //Map 转valuesBucket
          const valuesBucket = mapToValuesBucket(prodDisMap);
          parseProductDisList.push(valuesBucket);
        }
      }
    }
    DatabaseManager.batchInsertTableData(context, "base_store_prod_dis", parseProductDisList);
  } catch (error) {
    WinLog.info("base_product insert error" + error)
  }
}

完美实现我想要的方法。 数据库插入报错:10-11 17:17:23.730 17950-17950 A03d00/JSAPP net.winch...l.winsfa I INFO 2024-10-11 17:17:23,729 Index:54 Winchannel--->base_product insert errorTypeError: Cannot read property length of undefined 各位有遇到?

相关推荐
想要成为糕糕手7 分钟前
NO.48 旋转图像 —— LeetCode 热题 100 面试导向深度解析
javascript·算法·面试
掘金者阿豪10 分钟前
从Oracle迁到金仓,第一个月踩的最大的坑就是它
前端·后端
JieE21222 分钟前
LeetCode 138 随机链表的复制|两种解法详解(哈希表 + 原地 O (1) 空间)
javascript·算法·面试
AZaLEan__25 分钟前
CSS文档流相关:BFC
前端·css
小林ixn38 分钟前
Vue3接入DeepSeek流式输出,把“二进制碎片”和“局部热更新”扒个精光
前端·vue.js·人工智能
2501_9127840843 分钟前
Taocarts 前端国际化实战:多语言与多币种怎么落地不翻车
前端·多语言·taocarts
悟空瞎说1 小时前
AI 流式对话页面滚动抖动深度优化实战
前端
秋天的一阵风1 小时前
🔥 ECMAScript 2026 来了!使用这些新特性,JS 代码直接少一半
前端·javascript·ecmascript 6
小堂子这厢有礼了1 小时前
Chet.Admin 权限模型:菜单级 + 按钮级 + 行级三层防护
前端·后端·信息可视化·前端框架·.net
前端进阶之旅1 小时前
Next.js 16.3 新特性全解析 AI 驱动开发与 Instant Navigations 实战指南
开发语言·javascript·人工智能