Node.js中如何将[{key: 'key'}, {key1: 'key1'}]转为{key: 'key'}, {key1: 'key1'}
解决Node.js控制台输出格式及循环变量冲突问题
首先,你的代码里藏着一个容易踩的小坑——循环变量命名冲突:外层循环和内层循环都用了i当变量名,这会导致内层循环的i直接覆盖外层的索引值,让整个循环逻辑乱掉。先把这个问题修复,内层循环换成j这类不同的变量名。
接下来看你要的输出格式需求:想把控制台打印的[{key: 'key'}, {key1: 'key1'}]改成{key: 'key'}, {key1: 'key1'}(去掉数组的方括号)。之前用join()得到(Object, Object),是因为Object.values()返回的数组里是对象,直接调用toString()会默认输出[object Object],我们得把对象转换成可读的字符串形式才行。
修正后的代码方案
var body = request.body; // 外层循环用i,避免和内层变量冲突 for (var i = 0; i < body.data.length; i++) { var obj = body.data[i]; var keys = Object.keys(obj); // 内层循环改用j,防止变量覆盖 for (var j = 0; j < keys.length; j++) { // 获取当前键对应的数组值 var valueArr = Object.values(obj[keys[j]]); // 把数组里的每个对象转成可读字符串,再用逗号分隔 var formattedOutput = valueArr.map(item => JSON.stringify(item)).join(', '); console.log(formattedOutput); } }
代码说明
- 修复循环变量冲突:把内层循环的
i换成j,保证外层循环的索引不会被内层干扰,逻辑能正常执行。 - 转换对象为可读字符串:用
map()遍历valueArr里的每个对象,通过JSON.stringify()把对象转换成标准的JSON字符串(比如{"key": "key"}),再用join(', ')拼接成你想要的格式。
如果你希望输出和示例完全一致(键不带双引号),可以替换掉JSON.stringify(item),用自定义函数转换:
// 自定义对象转字符串函数 function objToString(obj) { return Object.entries(obj).map(([k, v]) => `${k}: '${v}'`).join(', ') .replace(/^/, '{').replace(/$/, '}'); } // 替换map部分的代码 var formattedOutput = valueArr.map(item => objToString(item)).join(', ');
这样就能得到你想要的{key: 'key'}, {key1: 'key1'}输出了。
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

