如何在JavaScript循环中将变量转换为指定结构的对象?
解决通过for循环生成目标对象的问题
我希望通过for循环内部的变量创建一个目标对象。示例代码如下:
var arr = [1, 3, 4, 5]; var output = {}; for(var i = 0; i < arr.length; i ++) { var message = "Array number : " + arr[i]; //var output = {number : message}; //obj console.log('Output', output); }但我不确定当前逻辑是否正确,我期望的输出为以下两种结构之一:
结构1:Output: { number:[ 0: {"Array number: 1"}, 1: {"Array number: 3"}, 2: {"Array number: 4"}, 3: {"Array number: 5"} ] }结构2:
Output: { number:{ "Array number: 1", "Array number: 3", "Array number: 4", "Array number: 5" } }
先来说说你当前代码的问题:你初始化了空的output对象,但循环里只是生成了message变量,根本没把它添加到output里;注释掉的那行更是每次循环都重新创建一个全新的output,完全无法累积数据。下面分别给出两种目标结构的正确实现:
实现第一种结构(number为数组,元素是包含对应文本的对象)
首先要提前把output.number初始化为空数组,然后在循环里把每个生成的对象推送到数组中:
var arr = [1, 3, 4, 5]; var output = { number: [] }; // 先初始化number为数组 for(var i = 0; i < arr.length; i ++) { var message = "Array number : " + arr[i]; // 把生成的对象push到number数组里 output.number.push({ [message]: message }); } console.log('Output', output);
运行后输出的结构和你期望的一致(数组的索引0、1、2、3是默认存在的,不需要手动指定):
Output: { number: [ {"Array number : 1"}, {"Array number : 3"}, {"Array number : 4"}, {"Array number : 5"} ] }
实现第二种结构(number为对象)
这里要注意一个JavaScript语法限制:对象必须是键值对的形式,你示例里直接写逗号分隔字符串的写法是不合法的。我给你两种符合语法的实现方式:
方式1:以文本作为对象的键(注意重复文本会被覆盖)
var arr = [1, 3, 4, 5]; var output = { number: {} }; for(var i = 0; i < arr.length; i ++) { var message = "Array number : " + arr[i]; // 把文本同时作为键和值 output.number[message] = message; } console.log('Output', output);
输出结果:
Output: { number: { "Array number : 1": "Array number : 1", "Array number : 3": "Array number : 3", "Array number : 4": "Array number : 4", "Array number : 5": "Array number : 5" } }
方式2:以索引作为键,文本作为值
var arr = [1, 3, 4, 5]; var output = { number: {} }; for(var i = 0; i < arr.length; i ++) { var message = "Array number : " + arr[i]; // 用循环索引作为键 output.number[i] = message; } console.log('Output', output);
输出结果:
Output: { number: { "0": "Array number : 1", "1": "Array number : 3", "2": "Array number : 4", "3": "Array number : 5" } }
这样就能完美实现你想要的两种结构啦~
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

