如何通过JavaScript循环自动生成指定结构的params参数对象
如何自动化创建特定格式的params参数对象?
问题背景
我不太熟悉JavaScript,目前我编写的代码如下:
var data = [{"Column":"","keyw":"","Column_3":"day of march 2011 to someother numeric"}, {"Column":"","keyw":"","Column_3":"this 22nd day of march 2011 to someother string"}, {"Column":"","keyw":"","Column_3":"this 22nd day of march 2021 monitor ground fort ord 1990 101"}, {"Column":"","keyw":"forhidden","Column_3":" area to aoid someother douling"}, {"Column":"","keyw":"forhidden","Column_3":" area to aoid someother string forbidden area"}, {"Column":"","keyw":"notpermitted","Column_3":"y of march 2001 monitor ground not permitted in states 1990 101"}, {"Column":"forhidden area to ","keyw":"aoid","Column_3":" someother douling"}, {"Column":"forhidden area to ","keyw":"aoid","Column_3":" someother string forbidden area"}, {"Column":"forhidden area to aoid someother ","keyw":"douling","Column_3":""}, {"Column":"this 22nd day of march 2001 ","keyw":"douling","Column_3":" ground fort ord 1990 101"}]; var json = JSON.parse(JSON.stringify(data)); //var json = JSON.stringify(data);
当前我需要手动创建如下格式的params参数对象:
params = { a: json[0].Column, aa: json[0].keyw, aaa: json[0].Column_3, b: json[1].Column, bb: json[1].keyw, bbb: json[1].Column_3, …… }
请问是否可以通过循环或自动化的方式实现这一参数对象的创建?
解决方案
当然可以!完全不用手动逐个编写键值对,通过循环就能轻松搞定这个需求。先拆解下你的需求规律:
- 数组里第
i个元素(从0开始数)对应的键名,是按a、b、c...的字母序列,分别生成单个字母、两个相同字母、三个相同字母的格式 - 这三个键分别对应元素的
Column、keyw、Column_3属性
基于这个规律,直接上实现代码:
var data = [{"Column":"","keyw":"","Column_3":"day of march 2011 to someother numeric"}, {"Column":"","keyw":"","Column_3":"this 22nd day of march 2011 to someother string"}, {"Column":"","keyw":"","Column_3":"this 22nd day of march 2021 monitor ground fort ord 1990 101"}, {"Column":"","keyw":"forhidden","Column_3":" area to aoid someother douling"}, {"Column":"","keyw":"forhidden","Column_3":" area to aoid someother string forbidden area"}, {"Column":"","keyw":"notpermitted","Column_3":"y of march 2001 monitor ground not permitted in states 1990 101"}, {"Column":"forhidden area to ","keyw":"aoid","Column_3":" someother douling"}, {"Column":"forhidden area to ","keyw":"aoid","Column_3":" someother string forbidden area"}, {"Column":"forhidden area to aoid someother ","keyw":"douling","Column_3":""}, {"Column":"this 22nd day of march 2001 ","keyw":"douling","Column_3":" ground fort ord 1990 101"}]; var json = JSON.parse(JSON.stringify(data)); // 初始化空的params对象 const params = {}; // 遍历数组自动生成键值对 json.forEach((item, index) => { // 根据索引生成对应字母:0→a,1→b,2→c...(a的ASCII码是97) const baseLetter = String.fromCharCode(97 + index); // 给params添加三个对应属性 params[baseLetter] = item.Column; params[baseLetter.repeat(2)] = item.keyw; params[baseLetter.repeat(3)] = item.Column_3; }); console.log(params);
代码细节说明
String.fromCharCode(97 + index):借助ASCII码规则生成字母序列,索引0对应a,索引1对应b,以此类推baseLetter.repeat(n):快速生成重复n次的字母字符串,比如a.repeat(2)得到aa,b.repeat(3)得到bbbforEach循环:自动遍历数组里的每个元素,给params对象添加对应键值对,不管数组有多少元素都能适配
小扩展
如果你的数组元素数量超过26个(超过字母z),String.fromCharCode会生成其他ASCII字符。要是需要处理这种场景,可以改成a1/aa1/aaa1、a2/aa2/aaa2这类键名格式,只需要调整baseLetter的生成逻辑就行,比如:
const baseLetter = `a${index + 1}`;
内容的提问来源于stack exchange,提问作者Yoyobrojo
相关产品推荐
相关产品推荐

