如何将三个等长JavaScript数组合并为结构化对象数组?
合并等长数组为结构化对象数组
嘿,这问题太典型了!既然三个数组长度完全一致,咱们可以利用数组的索引对应关系轻松搞定,下面给你两种常用的实现方式:
方法一:使用Array.map()(最简洁)
map()方法天生适合这种按索引遍历转换的场景,直接基于其中一个数组(比如date)遍历,每个索引位置对应另外两个数组的元素,组装成对象就行:
var date = ["2020-10-09", "2020-10-15"]; var count = [2, 5]; var name = ["Ivan", "Maria"]; var alldata = date.map((item, index) => ({ date: item, count: count[index], name: name[index] })); console.log(alldata); // 输出结果: // [ // { "date": "2020-10-09", "count": 2, "name": "Ivan" }, // { "date": "2020-10-15", "count": 5, "name": "Maria" } // ]
细节说明:
map()的第一个参数是当前遍历的元素(这里是date数组的每个日期),第二个参数是当前索引index- 利用
index去count和name数组中取对应位置的值,直接返回组装好的对象 - 注意对象字面量要加括号
(),不然箭头函数会把大括号当成代码块解析,导致语法错误
方法二:使用for循环(更直观,适合新手理解)
如果你更喜欢传统的循环方式,用普通的for循环也能实现,逻辑和map()完全一致:
var date = ["2020-10-09", "2020-10-15"]; var count = [2, 5]; var name = ["Ivan", "Maria"]; var alldata = []; for (let i = 0; i < date.length; i++) { alldata.push({ date: date[i], count: count[i], name: name[i] }); } console.log(alldata); // 输出和上面完全一样的结果
额外提醒:
- 一定要确保三个数组长度完全相同,不然会出现
undefined的情况(如果某个数组更短的话) - 如果
count数组的元素是字符串类型(比如["2", "5"]),可以用Number(count[index])转成数字类型,保证结构里的count是数值
内容的提问来源于stack exchange,提问作者pe_tsa
相关产品推荐
相关产品推荐

