如何将二维数组转换为对象数组,从指定数组选取属性名?
把二维数组映射为指定属性名的对象数组
这需求在JavaScript里很好实现,我给你两种实用的写法,按需选择就行:
简洁的ES6写法(推荐)
用map()遍历每一组数据,再用reduce()把每组数据转换成键值对对象:
const propertyName = ["name", "esteira", "horse"]; const data = [["1", "2", "3"], ["3", "4", "5"], ["6", "7", "8"]]; const result = data.map(item => item.reduce((acc, value, idx) => { acc[propertyName[idx]] = value; return acc; }, {}) ); // 输出就是你要的结果 console.log(result);
代码解释:
data.map(item => ...):遍历data里的每一个子数组,把每个子数组转换成目标对象。item.reduce(..., {}):以空对象为初始值,逐个将子数组的元素与propertyName对应索引的属性名绑定,最终生成完整的对象。
更直白的遍历写法(适合新手理解)
如果觉得reduce有点抽象,用两层forEach也能实现,逻辑更直观:
const propertyName = ["name", "esteira", "horse"]; const data = [["1", "2", "3"], ["3", "4", "5"], ["6", "7", "8"]]; const result = []; // 遍历每一组数据 data.forEach(group => { const obj = {}; // 给当前组的每个元素绑定对应的属性名 group.forEach((value, idx) => { obj[propertyName[idx]] = value; }); result.push(obj); }); console.log(result);
边界情况处理(可选)
如果你的二维数组子项长度和propertyName长度不一致,可以加个判断,避免出现无对应属性名的情况:
const result = data.map(item => item.reduce((acc, value, idx) => { // 只处理有对应属性名的元素 if (idx < propertyName.length) { acc[propertyName[idx]] = value; } return acc; }, {}) );
这样就能完美得到你想要的对象数组啦!
内容的提问来源于stack exchange,提问作者user10609288
相关产品推荐
相关产品推荐

