如何将列名数组与数组的数组转换为对象数组?
解决列名数组与二维数据数组转换为对象数组的问题
正确实现代码
方法一:使用reduce构建对象
var cols_names=['name','address','phoneno']; var arr_of_arrs=[ ['ABC','INDIA','0989898976'], ['XYZ','USA','0989898998'], ['CDE','UK','0989898956'] ]; const arr_of_obj = arr_of_arrs.map(row => { return cols_names.reduce((obj, colName, index) => { obj[colName] = row[index]; return obj; }, {}); }); console.log(arr_of_obj);
方法二:使用Object.fromEntries(更简洁)
var cols_names=['name','address','phoneno']; var arr_of_arrs=[ ['ABC','INDIA','0989898976'], ['XYZ','USA','0989898998'], ['CDE','UK','0989898956'] ]; const arr_of_obj = arr_of_arrs.map(row => Object.fromEntries(cols_names.map((name, idx) => [name, row[idx]])) ); console.log(arr_of_obj);
错误原因分析
你之前的代码中,arr_of_arrs.map((...cols_names) => ({cols_names}))存在逻辑错误:
...cols_names是将map回调的三个参数(当前行数组、行索引、原二维数组)收集到名为cols_names的数组中,而非使用外部定义的列名数组- 最终每个对象里的
cols_names字段实际是[当前行, 索引, 原数组],完全不符合预期
输出验证
两种方法都会生成你期望的对象数组:
[ { name: 'ABC', address: 'INDIA', phoneno: '0989898976' }, { name: 'XYZ', address: 'USA', phoneno: '0989898998' }, { name: 'CDE', address: 'UK', phoneno: '0989898956' } ]
这两种方案都支持任意数量的列(包括你提到的400列),无需手动逐个指定列名,完全适配大规模数据场景。
内容的提问来源于stack exchange,提问作者Vignesh RaviKumar
相关产品推荐
相关产品推荐

