Например, если у меня есть дома, в которых есть комнаты, в которых есть стулья, как мне организовать структуру данных, чтобы было удобнее с ними работать(удалять добавлять, менять порядок, изменять)? Самый простой вариант создать массив из объектов домов, в каждом объекте по массиву комнат, в каждой комнате по массиву стульев. Но это ведь жутко неудобно.
Но это ведь жутко неудобно.
Напишите функции-хелперы, вызвав которые Вы сможете обратиться к нужному дому, или комнате, или стулу (в понятном человеку виде):
const houses = [{ // многоуровневые данные (дома, квартиры, стулья)
name: '1/52 А',
rooms: [{
name: '10',
chairs: ['Стул 1', 'Стул 2']
}]
}, {
name: '6',
rooms: [{
name: '10',
chairs: ['Стул 1', 'Стул 2', 'Стул 3']
}, {
name: '11',
chairs: ['Стул 1', 'Стул 2', 'Стул 3', 'Стул 4']
}]
}, {
name: '3 корп. 4',
rooms: [{
name: '55',
chairs: ['Стул 1']
}]
}];
console.log('Дом:', getHouseByName('1/52 А'));
console.log('Комната:', getRoomByName('6', '11'));
console.log('Стул:', getChairByName('3 корп. 4', '55', 'Стул 1'));
console.log('Стулья:', getAllChairs('6', '10'));
// функции-хелперы
function getHouseByName(houseName) { // получаем нужный дом
return houses.find((el) => el.name === houseName);
}
function getRoomByName(houseName, roomName) { // получаем нужную квартиру
return getHouseByName(houseName).rooms.find((el) => el.name === roomName);
}
function getChairByName(houseName, roomName, chairName) { // получаем нужный стул
return getAllChairs(houseName, roomName).find((el) => el === chairName);
}
function getAllChairs(houseName, roomName) { // получаем все стулья
return getRoomByName(houseName, roomName).chairs;
}
<script>
const ArrayHouse = [
{
name: 'house1',
rooms: [
{
number: 3,
chairs: [
{
color: 'red',
height: 10,
width: 45
},
{
color: 'red',
height: 10,
width: 45
},
{
color: 'red',
height: 10,
width: 45
}
]
},
{
number: 1,
chairs: [
{
color: 'green',
height: 10,
width: 45
},
{
color: 'black',
height: 10,
width: 45
},
{
color: 'violet',
height: 10,
width: 45
}
]
}
]
},
{
name: 'house2',
rooms: [
{
number: 3,
chairs: [
{
color: 'red',
height: 10,
width: 45
},
{
color: 'red',
height: 10,
width: 45
},
{
color: 'red',
height: 10,
width: 45
}
]
},
{
number: 1,
chairs: [
{
color: 'green',
height: 10,
width: 45
},
{
color: 'black',
height: 10,
width: 45
},
{
color: 'violet',
height: 10,
width: 45
}
]
},
{
number: 15,
chairs: [
{
color: 'green',
height: 102,
width: 45
},
{
color: 'white',
height: 110,
width: 45
},
{
color: 'violet',
height: 150,
width: 45
}
]
}
]
}
]
class HouseContext {
constructor() {
console.log(this.getHouseByName('house1'));
this.addHouse({
name: 'addHouse',
rooms: []
});
console.log(ArrayHouse);
console.log(this.getRoomBuNumber('house2', 1));
this.addRoom('addHouse', {
number: 228,
chairs:[]
});
console.log(ArrayHouse);
}
getHouseByName(name) {
return ArrayHouse.find(v => v.name == name);
}
addHouse(house) {
ArrayHouse.push(house);
}
getRoomBuNumber(houseName, roomNumber) {
return ArrayHouse.find(v => v.name == houseName).rooms.find(v => v.number == roomNumber);
}
addRoom(houseName, room) {
ArrayHouse.find(v => v.name == houseName).rooms.push(room);
}
}
new HouseContext();
</script>
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть canvas, который рисует videoЯ хочу поменять источник видео и пока делаю это просто изменением атрибута src
Мне нужно сформировать отчет Excel и скачать егоДанные берутся из SQL ( примерно 200 тысяч строк на 70 столбиков)