javascript-将一个对象数组推入另一个对象失败
我有一排收容所的房间javascript-将一个对象数组推入另一个对象失败,javascript,arrays,Javascript,Arrays,我有一排收容所的房间 var rooms = [ { "id": 1001, "room": "room 1" }, { "id": 1002, "room": "room 2" }, { "id": 1003, "room": "room 3" }, { "id": 1004, "room": "room 4" } ]; 我还有
var rooms = [
{
"id": 1001,
"room": "room 1"
},
{
"id": 1002,
"room": "room 2"
},
{
"id": 1003,
"room": "room 3"
},
{
"id": 1004,
"room": "room 4"
}
];
我还有一份那个收容所的病人名单
var patients = [
{
"id": 10,
"room": "room 1",
"patient_name": "John"
},
{
"id": 11,
"room": "room 1",
"member_name": "Jane"
},
{
"id": 12,
"room": "room 1",
"member_name": "Joe"
},
{
"id": 20,
"room": "room 2",
"patient_name": "Matt"
},
{
"id": 30,
"room": "room 3",
"patient_name": "Alexa"
}
];
每个病人都属于一个特定的房间。我想将这些患者添加到他们的房间下面,并创建一个新阵列,如下所示:
var asylum = [
{
"id": 1001,
"room": "room 1",
"patients": [
{
"id": 10,
"room": "room 1",
"patient_name": "John"
},
{
"id": 11,
"room": "room 1",
"member_name": "Jane"
},
{
"id": 12,
"room": "room 1",
"member_name": "Joe"
}
]
},
{
"id": 1002,
"room": "room 2",
"patients": [
{
"id": 20,
"room": "room 2",
"patient_name": "Matt"
}
]
},
{
"id": 1003,
"room": "room 3",
"patients": [
{
"id": 30,
"room": "room 3",
"patient_name": "Alexa"
}
]
},
{
"id": 1004,
"room": "room 4",
"patients": []
}
]
这是我的预期输出,但我没有完全得到。这是我为达到预期效果而编写的代码
for (var i = 0, len = rooms.length; i < len; i++) {
for (var j = 0, len2 = patients.length; j < len2; j++) {
if (rooms[i].room === patients[j].room) {
rooms[i].members = patients[j];
}
}
}
for(变量i=0,len=rooms.length;i
我发了一封信。我已经在控制台中打印了阵列。只有一个元素被推送。您正在更改
房间[i]的值。每次您找到患者时,成员都会更改。相反,您需要将新患者推入阵列:
for (var i = 0; i < rooms.length; i++) {
for (var j = 0; j < patients.length; j++) {
if (rooms[i].room === patients[j].room) {
if (!rooms[i].members) { //this is the first patient found for this room, so you need to initialize the array
rooms[i].members = [];
}
rooms[i].members.push(patients[j]);
}
}
}
for(变量i=0;i
每次找到患者时,您都在更改房间[i]的值。相反,您需要将新患者推入阵列:
for (var i = 0; i < rooms.length; i++) {
for (var j = 0; j < patients.length; j++) {
if (rooms[i].room === patients[j].room) {
if (!rooms[i].members) { //this is the first patient found for this room, so you need to initialize the array
rooms[i].members = [];
}
rooms[i].members.push(patients[j]);
}
}
}
for(变量i=0;i
反复检查患者
,对于每个患者,用房间
检查房间
。如果找到,请添加到找到的文件室
var rooms=[{“id”:1001,“room”:“room 1”},{“id”:1002,“room”:“room 2”},{“id”:1003,“room”:“room 3”},{“id”:1004,“room”:“room 4”}];
var patients=[{“id”:10,“房间”:“1号房间”,“患者姓名”:“John”},{“id”:11,“房间”:“1号房间”,“成员姓名”:“Jane”},{“id”:12,“房间”:“1号房间”,“成员姓名”:“Joe”},{“id”:20,“房间”:“2号房间”,“患者姓名”:“Matt”},{“id”:30,“房间”:“3号房间”,“患者姓名”:“Alexa;
患者。forEach(患者=>{
var房间=房间.find(房间=>病人房间===房间.room);
如果(房间){
如果(!房间.病人){
room.patients=[];
}
房间。病人。推(病人);
}
});
控制台、日志(房间)代码>迭代患者
,并为每位患者使用房间
检查房间
。如果找到,请添加到找到的文件室
var rooms=[{“id”:1001,“room”:“room 1”},{“id”:1002,“room”:“room 2”},{“id”:1003,“room”:“room 3”},{“id”:1004,“room”:“room 4”}];
var patients=[{“id”:10,“房间”:“1号房间”,“患者姓名”:“John”},{“id”:11,“房间”:“1号房间”,“成员姓名”:“Jane”},{“id”:12,“房间”:“1号房间”,“成员姓名”:“Joe”},{“id”:20,“房间”:“2号房间”,“患者姓名”:“Matt”},{“id”:30,“房间”:“3号房间”,“患者姓名”:“Alexa;
患者。forEach(患者=>{
var房间=房间.find(房间=>病人房间===房间.room);
如果(房间){
如果(!房间.病人){
room.patients=[];
}
房间。病人。推(病人);
}
});
控制台、日志(房间)代码>您可以为相同的房间使用哈希表,通过生成庇护数组并分配哈希和第二个循环将患者推入房间,使用两个循环的方法
var rooms=[{id:1001,room:“room 1”},{id:1002,room:“room 2”},{id:1003,room:“room 3”},{id:1004,room:“room 4”}],
患者=[{id:10,房间:“1号房间”,患者姓名:“约翰”},{id:11,房间:“1号房间”,成员姓名:“简”},{id:12,房间:“1号房间”,成员姓名:“乔”},{id:20,房间:“2号房间”,患者姓名:“马特”},{id:30,房间:“3号房间”,患者姓名:“亚历克斯”},
hash=Object.create(null),
庇护=房间。地图(功能(o){
返回hash[o.room]={id:o.id,room:o.room,patients:[]};
});
患者。forEach(功能(o){
hash[o.room].patients.push(o);
});
控制台日志(庇护)代码>
.as console wrapper{max height:100%!important;top:0;}
您可以为相同的房间使用哈希表和双循环方法,方法是生成庇护数组并分配哈希和第二个循环以将患者推入房间
var rooms=[{id:1001,room:“room 1”},{id:1002,room:“room 2”},{id:1003,room:“room 3”},{id:1004,room:“room 4”}],
患者=[{id:10,房间:“1号房间”,患者姓名:“约翰”},{id:11,房间:“1号房间”,成员姓名:“简”},{id:12,房间:“1号房间”,成员姓名:“乔”},{id:20,房间:“2号房间”,患者姓名:“马特”},{id:30,房间:“3号房间”,患者姓名:“亚历克斯”},
hash=Object.create(null),
庇护=房间。地图(功能(o){
返回hash[o.room]={id:o.id,room:o.room,patients:[]};
});
患者。forEach(功能(o){
hash[o.room].patients.push(o);
});
控制台日志(庇护)代码>
.as-console-wrapper{max-height:100%!important;top:0;}
以下是我的脚本:注意,有时使用患者名,有时使用成员名,这是一个错误
var=[];
var房间=[
{
“id”:1001,
“房间”:“1号房间”
},
{
“id”:1002,
“房间”:“2号房间”
},
{
“id”:1003,
“房间”:“3号房间”
},
{
“id”:1004,
“房间”:“4号房间”
}
];
var患者=[
{
“id”:10,
“房间”:“房间1”,
“患者姓名”:“约翰”
},
{
“id”:11,
“房间”:“房间1”,
“患者姓名”:“简”
},
{
“id”:12,
“房间”:“房间1”,
“病人