Если для «ассоциативного массива» вы имеете в виду «структуру, позволяющую хранить данные в виде key: value
пар», то да, у нас это есть. В JS у нас есть Object
.
. Существуют различные способы создания таких структур, наиболее распространенным способом (также, способ , предпочтительный и рекомендуемый JS разработчиками), является через литерал объекта {}
. Данные, содержащиеся в таких структурах, могут быть доступны по-разному; предполагаемый способ - точка-нотация obj.key
, но массивоподобный метод доступа obj["key"]
эквивалентен:
var planet = {
name: "Earth",
greeting: "Hello, world!"
};
console.log("Planet", planet.name, "says:", planet["greeting"]);
// Planet Earth says: Hello, world!
Интересный факт: Array
s в JS - это особый тип Object
, где каждый key
является целым числом. Я не буду go вдаваться в детали, хотя вместо этого я настоятельно рекомендую поискать Mozilla Developer JavaScript справочник , чтобы узнать больше о фундаментальных структурах JS.
Что касается вашей первоначальной проблемы, вы можете создать структуру, подобную этой:
var list = {
Cardiology_STEMI: {
"Dr. John": {
office: "973-111-1111",
shift: "7a-7p",
cell: "973-222-2222"
},
"Dr. Mike": {
office: "973-333-3333",
shift: "4a-4p",
cell: "973-444-4444"
},
"Dr. Paul": {
office: "973-555-5555",
shift: "4a-4p",
cell: "973-666-6666"
}
},
Pulmonary: {
"Dr. Bob": {
office: "(123)456-789",
shift: "7a-7p",
cell: "(123)456-789"
},
"Dr. Bruce":{
office: "(987)654-321",
shift: "7a-7p",
cell: "(987)654-321"
},
"Dr. Banner":{
office: "(999)888-777",
shift: "7a-7p",
cell: "(999)888-777"
}
}
};
И затем, извлекая данные для определенного c доктора, используя массивоподобный метод доступа:
var DrMike = list.Cardiology_STEMI["Dr. Mike"];
var DrBanner = list.Pulmonary["Dr. Banner"];
console.log(DrMike, DrBanner);
// {name: "Dr. Mike", office: "973-333-3333", shift: "4a-4p", cell: "973-444-4444"}
// {name: "Dr. Banner", office: "(999)888-777", shift: "7a-7p", cell: "(999)888-777"}
В качестве альтернативы, реальный массив будет более полезным, если вы лучше познакомитесь с filter()
, map()
, find()
(и другими) методами объектов Array:
var list = {
Cardiology_STEMI: [
{
name: "Dr. John",
office: "973-111-1111",
shift: "7a-7p",
cell: "973-222-2222",
},{
name: "Dr. Mike",
office: "973-333-3333",
shift: "7a-7p",
cell: "973-444-4444",
},{
name: "Dr. Paul",
office: "973-555-5555",
shift: "7a-7p",
cell: "973-666-6666",
}
],
Pulmonary: [
{
name: "Dr. Bob",
office: "(123)456-789",
shift: "7a-7p",
cell: "(123)456-789",
},{
name: "Dr. Bruce",
office: "(987)654-321",
shift: "7a-7p",
cell: "(987)654-321",
},{
name: "Dr. Banner",
office: "(999)888-777",
shift: "7a-7p",
cell: "(999)888-777",
}
]
};
Найти определенный c врач в определенной c категории:
var DrMike = list.Cardiology_STEMI.find(drDetails=>{
return (drDetails.name === "Dr. Mike");
});
console.log(DrMike);
// {name: "Dr. Mike", office: "973-333-3333", shift: "4a-4p", cell: "973-444-4444"}
var DrBanner = list.Cardiology_STEMI.find(drDetails=>{
return (drDetails.name === "Dr. Banner");
});
console.log(DrBanner);
// {name: "Dr. Banner", office: "(999)888-777", shift: "7a-7p", cell: "(999)888-777"}
Чтобы найти врачей-кардиологов_STEMI, доступных с 4:00 до 16:00:
var cardiology_STEMI_avail_4AM_4PM = list.Cardiology_STEMI.filter(drDetails => {
return (drDetails.shift === "4a-4p");
});
console.log(cardiology_STEMI_avail_4AM_4PM);
// [
// {name: "Dr. Mike", office: "973-333-3333", shift: "4a-4p", cell: "973-444-4444"}
// {name: "Dr. Paul", office: "973-555-5555", shift: "4a-4p", cell: "973-666-6666"}
// ]
Надеюсь, это поможет :)