JS简码转换

作者: hi_yjs | 来源:发表于2017-07-31 17:03 被阅读62次

APP开发中免不了与服务器交互,而有些项目为了节省流量等原因,会要求不用全码而用简码(比如用户id不用uid,而用a)来交互。可这样的字段名称不易懂,不利于开发。在原生iOS中我们有第三方的YYModel可以轻松实现全码与简码的转换,但像RN等是使用JS来写的,似乎还没有类似的工具。于是我自己写了一个简易的转换工具。
  老规矩,不Bibi,直接上代码:

/**初始化专用返回对象简->全码映射表*/
const loginResp = {
    'a': 'update',
    'b': 'user',
    'c': 'readInfo'
};

const user = {
    'a': 'uid',
    'b': 'userName'
};

const readInfo = {
    'a': 'time',
    'b': 'readers'
};

const readers = {
    'a': 'readerId',
    'b': 'readerName',
    'c': 'status'
};

/**专用返回对象映射表*/
const respMap = {
    'loginResp': loginResp,
    'user': user,
    'readInfo': readInfo,
    'readers': readers
};

/**
 * 简码转全码
 * 
 * 参数说明:
 *  > resp 专用返回对象名称
 *  > json 返回的json
 * 返回说明:
 *  若字段在映射表中,则转为全码;
 *  若字段不在映射表中,则原样返回;
 *  数据结构与值不变
 */
export function changeToFull(resp, json) {
  if (respMap.hasOwnProperty(resp)) {
    let full = {};
    let keyMap = respMap[resp];

    for(var key in json){
      let fullKey = keyMap.hasOwnProperty(key) ? keyMap[key] : key;
      //在我们的项目中是Object需要转换的比数组要多得多,所以作为if的第一判断
      if (json[key] instanceof Object && !(json[key] instanceof Array)) { 
        //如果是Object则递归调用
        full[fullKey] = changeToFull(fullKey, json[key]);
      } else if (json[key] instanceof Array && json[key].length > 0 && json[key][0] instanceof Object && respMap.hasOwnProperty(fullKey)) {
        let tempArray = json[key];
        let tempFullArray = [];
        for (var i = 0; i < tempArray.length; i++) {
          let tempObj = changeToFull(fullKey, tempArray[i]);
          tempFullArray.push(tempObj);
        };
        full[fullKey] = tempFullArray;
      } else {
        full[fullKey] = json[key];
      };
    }
    return full;
  } else{ //映射表中没有,原样返回
    return json;
  };
}

这时候,您可能一脸懵逼——最开始那几个奇怪的常量是干嘛的?其实就是一些返回对象的简->全码对应关系,具体如下表:

图1
  而respMap则是专用返回对象映射表,我们需要去维护这个映射表,下面的方法changeToFull(resp, json)才能正常使用。
  通常服务器返回的内容,无非就是普通数据类型、对象类型与数组三种,上面方法的三个分支也正是针对这三种类型做处理。为了验证该方法对复杂数据结构同样适用,我们模拟一个多种数据类型相互嵌套的返回对象,具体如下:
  "loginResp": {
    "a": false,
    "b":{
      "a": 9527,
      "b": "大圣遛码",
    },
    "c":[{
      "a": "2017-07-07",
      "b":[{
        "a": 666,
        "b": "reader1",
        "c": 0
      }]
    },{
      "a": "2017-07-08",
      "b":[{
        "a": 666,
        "b": "reader1",
        "c": 1
      },{
        "a": 888,
        "b": "reader2",
        "c": 1 
      }]
    }],
  }

这样的数据结构够复杂了吧~数组字典各种嵌套,并且是用简码返回,非常不利于开发理解,于是我们把数据丢到我们的方法里,拿到返回对象再来看看:

{
  "update": false,
  "user":{
    "uid": 9527,
    "userName": "大圣遛码",
  },
  "readInfo":[{
    "time": "2017-07-07",
    "readers":[{
      "readerId": 666,
      "readerName": "reader1",
      "status": 0
    }]
  },{
    "time": "2017-07-08",
    "readers":[{
      "readerId": 666,
      "readerName": "reader1",
      "status": 1
    },{
      "readerId": 888,
      "readerName": "reader2",
      "status": 1 
    }]
  }],
}

这样来看就非常清晰明了了~
  (全码转简码也是类似的,就留给读者朋友们自行发挥啦~)

相关文章

  • JS简码转换

    APP开发中免不了与服务器交互,而有些项目为了节省流量等原因,会要求不用全码而用简码(比如用户id不用uid,而用...

  • 五笔简易学习五

    本章节主要掌握五笔字型输入法录入简码汉字的方法。都有哪些分类呢?分三种,一级简码,二级简码,三级简码。 5.1 一...

  • javaScript中数据类型转换方法

    JS 数据类型转换 方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了...

  • 数据类型转换

    JS 数据类型转换 方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了...

  • 前端开发入门到实战:JavaScript字符串转换数字

    js 字符串转换数字方法主要有三种: 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供...

  • 前端开发入门到实战:JavaScript字符串转换数字

    js 字符串转换数字方法主要有三种: 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供...

  • JS注意事项

    JS/JSON js对象转换字符串:JSON.stringify(要转换的对象)json字符串转换成js对象:JS...

  • 电脑三课

    简码、词组、识别码、 一简码: 二级简码:取前三个字根+空格 如:空、格、合、 二、词组: 四码拆出一个词组、 二...

  • js和jquery对象转换

    js对象转换为jquery对象 jquery对象转换为js对象

  • js关于字符串和数字的转换

    js字符串转换成数字 js 字符串转换数字方法主要有三种:转换函数、强制类型转换、利用JS变量弱类型特点进行转换 ...

网友评论

    本文标题:JS简码转换

    本文链接:https://www.haomeiwen.com/subject/cjurlxtx.html