如何在JavaScript与C++中打印数组的索引及对应元素(含指定格式实现及代码问题排查)
解决数组索引与元素并列输出的问题
JavaScript 修复方案
先看看你原来代码里的两个核心问题:
- 你把
emptArr定义在了循环内部,每次循环都会新建一个空数组,导致每次只能输出单个对象的数组,而不是最终整合好的完整结果数组。 obj.i = arr[i]这里是把字符串"i"作为了对象的属性名,而不是循环变量i的数值,所以最终对象的键会是"i"而不是对应的索引数字。
给你两种修复方式:
方式一:修正原循环代码
const arr = [1,2,3,4,5]; const emptArr = []; // 把数组移到循环外,只初始化一次 for (let i = 0; i < arr.length; i++) { let obj = {}; obj[i] = arr[i]; // 用方括号语法,把i的数值作为属性名 emptArr.push(obj); } console.log(emptArr); // 循环结束后再输出整个结果数组
方式二:用更简洁的map方法
JavaScript的数组map方法天生适合这种转换场景,一行就能搞定:
const arr = [1,2,3,4,5]; const result = arr.map((item, index) => ({ [index]: item })); console.log(result);
这里用了计算属性名(方括号包裹index),能直接把当前元素的索引作为对象的键,map会自动遍历整个数组,返回我们需要的结果数组。
C++ 实现方案
C++里没有JavaScript那样的对象字面量,我们可以用vector存储map对象来模拟需求的结构,每个map里只存一组索引和元素的键值对:
#include <iostream> #include <vector> #include <map> int main() { std::vector<int> arr = {1, 2, 3, 4, 5}; std::vector<std::map<int, int>> result; // 遍历数组,构建目标结构 for (int i = 0; i < arr.size(); ++i) { std::map<int, int> singlePair; singlePair[i] = arr[i]; result.push_back(singlePair); } // 按照要求的格式输出结果 std::cout << "[ "; for (size_t idx = 0; idx < result.size(); ++idx) { const auto& pairMap = result[idx]; auto it = pairMap.begin(); std::cout << "{ " << it->first << " : " << it->second << " }"; if (idx != result.size() - 1) { std::cout << ", "; } } std::cout << " ]" << std::endl; return 0; }
这段代码运行后会输出和JavaScript一致格式的结果:[ { 0 : 1 }, { 1 : 2 }, { 2 : 3 }, { 3 : 4 }, { 4 : 5 } ]
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

