如何从一维数组创建指定结构的JavaScript对象
如何将数组转换为指定结构的对象?
首先明确你的需求:用给定的字符串数组,生成一个以数组元素为键、每个键对应固定嵌套对象的目标结构。
你的目标对象
var obj = { "ABC" : { name: true, dob: true}, "CDE" : { name: true, dob: true}, "EFG" : { name: true, dob: true}, "CBA" : { name: true, dob: true}, "XYZ" : { name: true, dob: true} };
现有数组
var arr = ["ABC","CDE","EFG","CBA","XYZ"];
你之前代码的问题
你尝试用数组中转再赋值的方式其实走了弯路:把每个键值对存成数组元素,再把整个数组绑定到对象的索引键上,最后JSON.stringify后就出现了带数字索引的奇怪结构。我们不需要中间数组,直接操作目标对象即可。
几种正确的实现方式
1. 普通for循环(兼容性好)
这是最基础的写法,适配所有运行环境:
var arr = ["ABC","CDE","EFG","CBA","XYZ"]; var newObj = {}; for (let i = 0; i < arr.length; i++) { const key = arr[i]; newObj[key] = { name: true, dob: true }; }
遍历数组的每个元素,把它作为newObj的键,对应的值直接设为你需要的固定对象。
2. forEach遍历(简洁易读)
如果你的环境支持ES6+,forEach写法更清爽直观:
var arr = ["ABC","CDE","EFG","CBA","XYZ"]; var newObj = {}; arr.forEach(key => { newObj[key] = { name: true, dob: true }; });
直接遍历数组每个元素,一步完成键值对的赋值。
3. reduce方法(函数式风格)
偏好函数式编程的话,reduce可以高效完成转换:
var arr = ["ABC","CDE","EFG","CBA","XYZ"]; var newObj = arr.reduce((acc, key) => { acc[key] = { name: true, dob: true }; return acc; }, {});
reduce的第一个参数是处理函数,acc是累加器(初始值设为空对象{}),每次遍历把当前键和对应值加到累加器里,最后返回最终的对象。
不管用哪种方法,最终都会生成你想要的目标结构,直接使用newObj即可,不需要额外的JSON.stringify操作(除非你需要把它转成字符串格式)。
内容的提问来源于stack exchange,提问作者Kirankumar Dafda
相关产品推荐
相关产品推荐

