引言:

今天遇到一个需求,需要动态创建一个 JS 对象数组,对象中的 key 值并不都是一样的(准确说是一个有序的字母),具体如下:

var options = [{"A":"选项A XXXX"},{"B":"选项B XXXX"},{"C":"选项C XXXX"},{"D":"选项D XXXX"},
]

第一眼感觉很简单,但是仔细看的话,就会发现与我们常见的创建一个对象,差别还是很大的。因为通常情况下我们创建的对象,key 是硬编码的,如下:

var person = {};
person.name = "江小白";    // 硬编码指定 key 为 name

再看我们的需求,每一个 item 对象是一个结构类似,但是 key 值并不完全一样的。key 为有序的字母组合。

要解决这个问题,就必须解决以下两个问题:

  1. item 对象 key 名的动态指定
  2. key 值的有序生成

key 名的动态指定:

解决每一个 item 对象 key 名,动态指定,两种方法:

  1. 使用 eval() 函数解决

  eval() 函数会将传入的字符串当做 JavaScript 代码进行执行【PS:因为该函数可以将字符串解析为JS代码执行,所以使用时,一定要考虑安全问题,细节不在这里说明】。详情点击链接参考MDN,下面是一个小 Demo

var person = {}
var key = 'name'
eval('person.' + key + "=" + "'江小白'");    // 内部字符串被拼接之后,作为 JS 代码执行,从而达到动态指定 key 值的目的
console.dir(person)
  1. 使用  属性访问器 解决(PS:即 '[key]' )

有关属性访问器,详情点击上面链接获取,这里直接给出属性访问器 Demo

var person = {}
var key = 'name'
person[key] = "公子小白"    // 使用 JS 属性选择器动态指定 key
console.dir(person)

key 值的有序生成:

我们知道这种有序的 key(A、B、C、D......),生成的时候最好使用 ASCII 字符的编码特点来实现,要实现 ASCII 与对应的字符映射(准确数叫做编码规则),其实在 C/C++ 这种语言下很简单,因为可以直接对 char 进行算数运算 或者 直接强制类型转换就可以将 int 转换为 char。

    char c = 'A';// int n = (int)c;// char b = (char)n;printf("n = %d\n", n);  // n = 65printf("b = %c\n", b);  // b = A

但是很不幸 JS 中不能直接这样操作,只能借助对应函数实现,说实话我只感觉这些函数肯定存在,但却从未用过,看来还是代码撸的太少了。其实需要的函数就是:from​Char​Code、from​Code​Point、charCodeAt、code​PointAt

from​Char​Code、from​Code​Point 负责将 ascii 码对应的数字转为 对应的字符

charCodeAt、code​PointAt 负责将 对应的字符 转为对应的数字 ascii 码值

两者的使用很简单,可以点击链接参看 MDN 的详细文档,这里之列出来简单的使用 Demo

console.log("ascii to char:"  + String.fromCodePoint(65))    // ascii to char: A
console.log("ascii to char:"  + String.from​Char​Code(65))    // ascii to char: Aconsole.log("char to ascii:"  + 'A'.charCodeAt(0))    // char to ascii: 65
console.log("char to ascii:"  + 'A'.code​PointAt(0))    // char to ascii: 65

综合上面实现需求的最终 Demo 如下:

var char = 'A';
console.log("ascii to char:"  + String.fromCodePoint(65))    // ascii to char: A
console.log("char to ascii:"  + 'A'.charCodeAt(0))    // char to ascii: 65var options = []for(index = 0 ; index< 4; index++){var option = {}option[char] = "选项" + char + "XXX";options.push(option)char = String.fromCharCode(char.charCodeAt(0) + 1);
}
console.log(options)

本文并没有技术含量,但对于初学者可能还是有一定帮助,这里主要是做个记录方便日后查看。

JavaScript 进行数值与对应的 ASCII 字符之间的转换【from​Char​Code、from​Code​Point、charCodeAt、code​PointAt】相关推荐

  1. c#字符型转化为asc_C#中使用强制类型实现字符串和ASCII码之间的转换

    C#貌似没有专门用于ASCII码转字符或字符转ASCII码的系统函数,所以小编这里就借用一下强制类型转换来实现ASCII码与字符之间的互转. 所谓的ASCII码,即American Standard ...

  2. javascript十六进制数字和ASCII字符之间转换

    var hex="0x29";//十六进制 var charValue = String.fromCharCode(hex);//生成Unicode字符 var charCode ...

  3. 字母与ASCII码之间的转换

    1.先解释下两个名词,主要从百度百科中查询得到: ASCII (American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字 ...

  4. Bash Shell中16进制数字和ASCII字符相互转换

    Bash Shell中ASCII值和字符之间的转换 1.数值转换为ASCII字符 方法一: i=97echo $i | awk '{printf("%c", $1)}' 方法二: ...

  5. 如何在 JavaScript 中的字符串的字符之间添加空格

    在今天的文章中,我们将学习如何轻松地在 JavaScript 中的字符串字符之间包含空格. 1.String split() 和 Split join() 方法 要在字符串的字符之间添加空格,请对字符 ...

  6. c++ 字符类型总结区别wchar_t,char,WCHAR(转)

    1.区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数.    UNICODE:wc ...

  7. C++字符类型总结区别wchar_t,char,WCHAR

    转至:http://www.360doc.com/content/12/0807/01/9290626_228750141.shtml 1.区别wchar_t,char,WCHAR ANSI:即 ch ...

  8. c语言宽字符与wchar,浅谈c++ 字符类型总结区别wchar_t,char,WCHAR

    1.区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数. UNICODE:wchar ...

  9. sql查询非ascii字符_SQL替换:如何在SQL Server中替换ASCII特殊字符

    sql查询非ascii字符 One of the important steps in an ETL process involves the transformation of source dat ...

最新文章

  1. 基于 Dash Bio 的生物信息学数据可视化
  2. JDBC 利用反射技术将查询结果封装为对象(简单ORM实现)
  3. 《研磨设计模式》chap20 享元模式 Flyweight (4)总结
  4. Ubuntu 16.04安装Nginx
  5. spring整合struts2时作用域scope解析
  6. java https安全传输
  7. 软件测试Homework03
  8. 【037】Excel 中遍历修改文件(VBA)
  9. Vue 引入 zepto
  10. 华为狼性文化遭质疑,那我们当个佛系程序员可好?
  11. usb大容量存储设备 被禁用 无法启动,彻底卸载大势至 【手贱,安装大势至USB接口软件后无法使用U盘】
  12. 山东大学——国际结算方式
  13. 面试题-实现数组map方法
  14. 别人写的微信小程序,收藏借鉴!
  15. 怎么看电脑网卡是否支持5g频段
  16. InnoDB中的页合并与分裂
  17. Linux查看末尾几行的命令
  18. 货币信息高于货币价值而存在
  19. LLC谐振半桥电路分析与设计(1)
  20. 常见的测试用例设计方法7---因果图法

热门文章

  1. 二十九、Java的异常处理
  2. AAAI 2021 | 基于动态混合关系网络的对话式语义解析方法
  3. 基于多域连接卷积神经网络的精神分裂症脑功能网络分类
  4. HDU 1556 前缀和 树状数组 线段树
  5. Pinyin4j中文字符和拼音之间的转换
  6. 零基础带你快速入门Ribbon技术(浅显易懂、小白都能看懂)
  7. Docker——IDEA部署Spring Boot项目到远程Docker解决方案
  8. Docker——基于HubServing部署全套PaddleOCR Restful API服务(CPU版本)
  9. JAVA——基于HttpClient的正方教务系统[1999-2020]模拟登录|模拟退出|课程查询|成绩查询|考试查询基本解决方案
  10. 粗题⼈不考你没学过的算法