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”,
“病人