Javascript JS使用新键创建一个新的对象数组

Javascript JS使用新键创建一个新的对象数组,javascript,arrays,Javascript,Arrays,所以我有两个JSON对象数组,房间和预订。我想输出一个新的对象数组,该数组包含来自这两个数组的数据,并具有新的数据类型。不确定如何创建新的数据类型 var rooms = [ {id:1, room:'treehouse'}, {id:2, room:'casa'}, {id:3, room:'vacation'}, {id:4, room:'presidential'} ]; var reservations = [ {id:1, roomID:'

所以我有两个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
,检入房间的映射结构,然后输出。我不太清楚该怎么办。

您可以使用
Array.reduce()
创建具有房间名称的
id
地图,然后在预订中使用
Array.map()
将具有给定id的房间与roomname合并:

var rooms=[{id:1,房间:'treehouse'},{id:2,房间:'casa'},{id:3,房间:'vacation'},{id:4,房间:'presidential'}];
var reservations=[{id:1,室友:'2',时间:'2pm',地点:'rome'},{id:2,室友:'3',时间:'4pm',地点:'paris'},{id:3,室友:'1',时间:'4pm',地点:'london'},{id:4,室友:'2',时间:'7pm',地点:'Room'},{id:5,室友:'1',时间:'12pm',地点:'london伦敦',{id:6,室友:'4',时间:'4pm',地点:'berlin柏林'};
let roomMap=房间。减少((a,curr)=>{
a[curr.id]={roomname:curr.room};
返回a;
},{});
让result=reservations.map((o)=>Object.assign({},o,roomMap[o.roomID]);
控制台日志(结果)
var房间=[
{id:1,房间:'treehouse'},
{id:2,房间:'casa'},
{id:3,房间:'休假'},
{id:4,会议室:'presidential'}
];
var保留=[
{id:1,roomID:'2',时间:'2pm',地点:'rome'},
{id:2,房间号:'3',时间:'下午4点',地点:'paris'},
{id:3,房间号:'1',时间:'下午4点',地点:'london'},
{id:4,roomID:'2',时间:'7pm',地点:'rome'},
{id:5,房间号:'1',时间:'12点',地点:'london'},
{id:6,室友:'4',时间:'下午4点',地点:'berlin'}
];
console.log(
map(a=>({…a,roomname:rooms.find(b=>b.id==a.roomID.room}))

)
您可以利用a的功能,获得新对象的附加信息

var rooms=[{id:1,room'treehouse'},{id:2,room'casa'},{id:3,room'vacation'},{id:4,room'presidential'}],
roomMap=新地图(rooms.Map({id:roomid,room:roomname})=>[roomid,{roomname}]),
预订=[{id:1,室友:'2',时间:'2pm',地点:'rome'},{id:2,室友:'3',时间:'4pm',地点:'paris'},{id:3,室友:'1',时间:'4pm',地点:'london'},{id:4,室友:'2',时间:'7pm地点:'rome'},{id:5,室友:'1',时间:'12pm地点:'london,{id:6,室友:“4”,时间:“下午4点”,地点:“柏林”},
bookings=reservations.map(o=>Object.assign({},o,roomMap.get(+o.roomID));
console.log(预订);
.as控制台包装{最大高度:100%!重要;顶部:0;}
var保留=[
{id:1,roomID:2,时间:'2pm',地点:'rome'},
{id:2,roomID:3,时间:'4pm',地点:'paris'},
{id:3,roomID:1,时间:'下午4点',地点:'london'},
{id:4,roomID:2,时间:'7pm',地点:'rome'},
{id:5,roomID:1,时间:'12pm',地点:'london'},
{id:6,roomID:4,时间:'4pm',地点:'berlin'}
];
var房间=[
{id:1,房间:'treehouse'},
{id:2,房间:'casa'},
{id:3,房间:'休假'},
{id:4,会议室:'presidential'}
];
预订。forEach(预订=>{
reservation.roomname=rooms.find({id})=>id==reservation.roomID.roome;
})
console.log(预订);
您可以使用

reservations.map(function (val) {
    return Object.assign(val, rooms.find(function (item) {
        return val.roomID === item.id ? item : {}
    }))
})

让我知道这是否适合您。

您可以创建一个查找,并在
保留
数组上迭代,并构造所需的输出:

var rooms=[{id:1,房间:'treehouse'},{id:2,房间:'casa'},{id:3,房间:'vacation'},{id:4,房间:'presidential'}];
var reservations=[{id:1,室友:'2',时间:'2pm',地点:'rome'},{id:2,室友:'3',时间:'4pm',地点:'paris'},{id:3,室友:'1',时间:'4pm',地点:'london'},{id:4,室友:'2',时间:'7pm',地点:'Room'},{id:5,室友:'1',时间:'12pm',地点:'london伦敦',{id:6,室友:'4',时间:'4pm',地点:'berlin柏林'};
var roomHash=rooms.reduce((all,{id,roome})=>({……all,[id]:roome}),{});
var result=reservations.map(item=>({…item,room:roomHash[item.roomID]}));

console.log(result);
是否打算使用
roomid
vs
roomid
?以及为什么类型不同一个是数字,一个是字符串。