[英]JS create a new array of objects with new key
所以我有两个JSON对象,房间和预留数组。 我想输出一个新的对象数组,这些对象包含来自这两个数组的数据和新的数据类型。 不确定如何创建新的数据类型。
var rooms = [
{id:1, room:'treehouse'},
{id:2, room:'casa'},
{id:3, room:'vacation'},
{id:4, room:'presidential'}
];
var reservations = [
{id:1, roomID:'2', time:'2pm', location:'rome'},
{id:2, roomID:'3', time:'4pm', location:'paris'},
{id:3, roomID:'1', time:'4pm', location:'london'},
{id:4, roomID:'2', time:'7pm', location:'rome'},
{id:5, roomID:'1', time:'12pm', location:'london'},
{id:6, roomID:'4', time:'4pm', location:'berlin'}
];
期望的输出:
var bookings = [
{id: 1, roomid:1, time:'12pm',location:'london', roomname:'treehouse'},
{id: 2, roomid:1, time:'4pm', location:'london', roomname:'treehouse'},
{id: 3, roomid:2, time:'2pm', location:'rome', roomname:'casa'},
{id: 4, roomid:2, time:'7pm', location:'rome', roomname:'casa'},
{id: 5, roomid:3, time:'4pm', location:'paris', roomname:'vacation'},
{id: 6, roomid:4, time:'4pm', location:'berlin', roomname:'presidential'}
]
我对如何做到这一点的逻辑感到困惑。 我正在考虑迭代reservations
数组,并为每个预订抓住roomId
并检查房间的地图结构然后输出。 我不太清楚该怎么做。
var rooms = [ {id:1, room:'treehouse'}, {id:2, room:'casa'}, {id:3, room:'vacation'}, {id:4, room:'presidential'} ]; var reservations = [ {id:1, roomID:'2', time:'2pm', location:'rome'}, {id:2, roomID:'3', time:'4pm', location:'paris'}, {id:3, roomID:'1', time:'4pm', location:'london'}, {id:4, roomID:'2', time:'7pm', location:'rome'}, {id:5, roomID:'1', time:'12pm', location:'london'}, {id:6, roomID:'4', time:'4pm', location:'berlin'} ]; console.log( reservations.map(a=>({...a, roomname: rooms.find(b=>b.id==a.roomID).room})) )
您可以使用Array.reduce()
创建具有房间名称的id
地图的地图,然后在预订时使用Array.map()
将具有给定id的房间与roomname合并:
var rooms = [ {id:1, room:'treehouse'}, {id:2, room:'casa'}, {id:3, room:'vacation'}, {id:4, room:'presidential'} ]; var reservations = [ {id:1, roomID:'2', time:'2pm', location:'rome'}, {id:2, roomID:'3', time:'4pm', location:'paris'}, {id:3, roomID:'1', time:'4pm', location:'london'}, {id:4, roomID:'2', time:'7pm', location:'rome'}, {id:5, roomID:'1', time:'12pm', location:'london'}, {id:6, roomID:'4', time:'4pm', location:'berlin'} ]; let roomMap = rooms.reduce((a,curr)=>{ a[curr.id] = {roomname : curr.room}; return a; },{}); let result = reservations.map((o)=> Object.assign({},o,roomMap[o.roomID])); console.log(result);
您可以记录Map
的强大功能并获取新对象的附加信息。
var rooms = [{ id: 1, room: 'treehouse' }, { id: 2, room: 'casa' }, { id: 3, room: 'vacation' }, { id: 4, room: 'presidential' }], roomMap = new Map(rooms.map(({ id: roomid, room: roomname }) => [roomid, { roomname }])), reservations = [{ id: 1, roomID: '2', time: '2pm', location: 'rome' }, { id: 2, roomID: '3', time: '4pm', location: 'paris' }, { id: 3, roomID: '1', time: '4pm', location: 'london' }, { id: 4, roomID: '2', time: '7pm', location: 'rome' }, { id: 5, roomID: '1', time: '12pm', location: 'london' }, { id: 6, roomID: '4', time: '4pm', location: 'berlin' }], bookings = reservations.map(o => Object.assign({}, o, roomMap.get(+o.roomID))); console.log(bookings);
.as-console-wrapper { max-height: 100% !important; top: 0; }
var reservations = [ {id:1, roomID: 2, time:'2pm', location:'rome'}, {id:2, roomID: 3, time:'4pm', location:'paris'}, {id:3, roomID: 1, time:'4pm', location:'london'}, {id:4, roomID: 2, time:'7pm', location:'rome'}, {id:5, roomID: 1, time:'12pm', location:'london'}, {id:6, roomID: 4, time:'4pm', location:'berlin'} ]; var rooms = [ {id:1, room:'treehouse'}, {id:2, room:'casa'}, {id:3, room:'vacation'}, {id:4, room:'presidential'} ]; reservations.forEach(reservation => { reservation.roomname = rooms.find(({id}) => id === reservation.roomID).room; }) console.log(reservations);
你可以用
reservations.map(function (val) {
return Object.assign(val, rooms.find(function (item) {
return val.roomID === item.id ? item : {}
}))
})
如果这对您有用,请告诉我。
您可以使用Array.prototype.reduce
和Array.prototype.map
创建查找,以迭代reservations
数组并构造所需的输出:
var rooms = [{id:1, room:'treehouse'},{id:2, room:'casa'},{id:3, room:'vacation'},{id:4, room:'presidential'}]; var reservations = [{id:1, roomID:'2', time:'2pm', location:'rome'},{id:2, roomID:'3', time:'4pm', location:'paris'},{id:3, roomID:'1', time:'4pm', location:'london'},{id:4, roomID:'2', time:'7pm', location:'rome'},{id:5, roomID:'1', time:'12pm', location:'london'},{id:6, roomID:'4', time:'4pm', location:'berlin'}]; var roomHash = rooms.reduce((all, {id, room}) => ({...all, [id]: room }), {}); var result = reservations.map(item => ({...item, room: roomHash[item.roomID]})); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.