JavaScript技术问题:数组推入子数组及循环生成指定JSON结构
嘿,我来帮你搞定这两个JavaScript问题!
1. 如何在JavaScript中向一个数组内部推入另一个数组?
根据你想要的效果,有几种实用的方法可选:
把另一个数组的元素逐个添加到目标数组(最常用)
推荐用ES6+的展开运算符,写法简洁直观:const targetArr = [1, 2, 3]; const sourceArr = [4, 5, 6]; targetArr.push(...sourceArr); // targetArr 现在变成 [1,2,3,4,5,6]如果你不想修改原数组,可以用
concat方法生成新数组:const targetArr = [1, 2, 3]; const sourceArr = [4, 5, 6]; const newArr = targetArr.concat(sourceArr); // newArr 是 [1,2,3,4,5,6],原数组不变把整个数组作为单个元素推入
直接用push方法即可,此时目标数组会多一个数组类型的元素:const targetArr = [1, 2, 3]; const sourceArr = [4, 5, 6]; targetArr.push(sourceArr); // targetArr 现在是 [1,2,3,[4,5,6]]
2. 循环生成指定格式的JavaScript对象(你示例的结构)
先拆解你要的目标结构:一个包含people数组的对象,每个people元素有pic、name、role字段,还有嵌套的appointments数组(每个预约包含start、end(Date对象)和title)。
我们可以通过定义数据源,再循环遍历生成目标结构,示例代码如下:
// 模拟你的原始数据源(可以替换成从接口获取的真实数据) const rawData = [ { name: "Ravi", role: "team member", pic: "sap-icon://employee", bookings: [ { startStr: "2017-01-21", endStr: "2017-01-21", title: "Meet John Miller" }, { startStr: "2017-01-18", endStr: "2017-01-18", title: "Team meeting" } ] }, // 可以添加更多人员数据 { name: "Luna", role: "designer", pic: "sap-icon://employee", bookings: [ { startStr: "2017-02-03", endStr: "2017-02-03", title: "UI review" }, { startStr: "2017-02-08", endStr: "2017-02-08", title: "Prototype demo" } ] } ]; // 初始化目标对象 const payloadTest = { people: [] }; // 循环生成结构 rawData.forEach(person => { // 处理预约数据,把字符串转成Date对象 const formattedAppointments = person.bookings.map(booking => ({ start: new Date(booking.startStr), end: new Date(booking.endStr), title: booking.title })); // 把处理好的人员信息推入people数组 payloadTest.people.push({ pic: person.pic, name: person.name, role: person.role, appointments: formattedAppointments }); }); console.log(payloadTest);
运行这段代码后,就能得到你需要的格式啦。如果你的数据源是动态的,只需要替换rawData为你的实际数据即可。
注意:你示例里的结构是JavaScript对象,不是严格的JSON(JSON不支持
new Date()这种构造函数)。如果最终需要转成JSON字符串,记得把Date对象转成ISO字符串(比如new Date().toISOString())。
内容的提问来源于stack exchange,提问作者user2644620
相关产品推荐
相关产品推荐

