Ich arbeite an einem Ressourcenbuchungssystem und benötige Ratschläge zur Optimierung meiner Logik zur Überprüfung der Ressourcenverfügbarkeit. Die aktuelle Implementierung funktioniert, fühlt sich aber ineffizient an, da sie unnötige Prüfungen durchführt.
Hier ist das Szenario:
Ich habe eine Liste von Ressourcen (z. B. Geräte, Räume oder andere buchbare Elemente), die in der Ressourcenliste gespeichert sind.
Jede Ressource kann mehrere Buchungen haben, die in einer Buchungsliste gespeichert sind.< /li>
Wenn eine Buchungsanfrage eingeht, Ich muss prüfen, ob sich die angeforderten Daten mit vorhandenen Buchungen für diese Ressource überschneiden. Wenn die Ressource verfügbar ist, füge ich sie der Liste der bestätigten Buchungen hinzu. Jede Buchung hat ein Startdatum und ein Enddatum.
// Sample resource list
const resourceList = [
{ resourceId: "R1", status: "Available" },
{ resourceId: "R2", status: "Booked" },
{ resourceId: "R3", status: "Booked" }
];
// Sample booking list
const bookingList = [
{ resourceId: "R2", startDate: "2025-01-10", endDate: "2025-01-15" },
{ resourceId: "R2", startDate: "2025-01-20", endDate: "2025-01-25" },
{ resourceId: "R3", startDate: "2025-01-12", endDate: "2025-01-18" }
];
// Requested dates
const startDate = new Date("2025-01-15");
const endDate = new Date("2025-01-19");
let availableResources = [];
let newBookings = [];
const requiredResources = 1; // Example: Only need 1 resource
for (let resource of resourceList) {
if (resource.status === "Booked") {
const resourceBookings = bookingList.filter(
booking => booking.resourceId === resource.resourceId
);
// Check if the resource is available for the requested dates
const isAvailable = resourceBookings.every(booking => {
const existingStart = new Date(booking.startDate);
const existingEnd = new Date(booking.endDate);
return endDate < existingStart || startDate > existingEnd;
});
// Add resource if available and limit not met
if (isAvailable && availableResources.length < requiredResources) {
availableResources.push(resource.resourceId);
newBookings.push({
resourceId: resource.resourceId,
startDate: startDate.toISOString().split("T")[0],
endDate: endDate.toISOString().split("T")[0]
});
}
}
}
Meine Bedenken:
Unnötige Kontrollen: Ich habe das Gefühl, dass ich nicht jede Buchung überprüfen sollte sein und es gibt eine bessere und effizientere Möglichkeit, nur eine Teilmenge der Buchung zu überprüfen?
Leistungsprobleme: Da die Anzahl der Ressourcen und Buchungen wächst, Dieser Ansatz lässt sich möglicherweise nicht gut skalieren.
Wenn Sie ein ähnliches Problem angegangen sind oder Ideen haben, würde ich mich freuen, sie zu hören!
Vielen Dank im Voraus für Ihre Vorschläge.
Ich arbeite an einem [b]Ressourcenbuchungssystem[/b] und benötige Ratschläge zur Optimierung meiner Logik zur Überprüfung der Ressourcenverfügbarkeit. Die aktuelle Implementierung funktioniert, fühlt sich aber ineffizient an, da sie unnötige Prüfungen durchführt. Hier ist das Szenario: [list] [*]Ich habe eine Liste von Ressourcen (z. B. Geräte, Räume oder andere buchbare Elemente), die in der Ressourcenliste gespeichert sind. [*]Jede Ressource kann mehrere Buchungen haben, die in einer Buchungsliste gespeichert sind.< /li> Wenn eine Buchungsanfrage eingeht, Ich muss prüfen, ob sich die angeforderten Daten mit vorhandenen Buchungen für diese Ressource überschneiden. Wenn die Ressource verfügbar ist, füge ich sie der Liste der bestätigten Buchungen hinzu. Jede Buchung hat ein Startdatum und ein Enddatum. [/list] Hier ist mein aktueller Code: [code]// Sample resource list const resourceList = [ { resourceId: "R1", status: "Available" }, { resourceId: "R2", status: "Booked" }, { resourceId: "R3", status: "Booked" } ];
// Requested dates const startDate = new Date("2025-01-15"); const endDate = new Date("2025-01-19");
let availableResources = []; let newBookings = []; const requiredResources = 1; // Example: Only need 1 resource
for (let resource of resourceList) { if (resource.status === "Booked") { const resourceBookings = bookingList.filter( booking => booking.resourceId === resource.resourceId );
// Check if the resource is available for the requested dates const isAvailable = resourceBookings.every(booking => { const existingStart = new Date(booking.startDate); const existingEnd = new Date(booking.endDate);
// Add resource if available and limit not met if (isAvailable && availableResources.length < requiredResources) { availableResources.push(resource.resourceId); newBookings.push({ resourceId: resource.resourceId, startDate: startDate.toISOString().split("T")[0], endDate: endDate.toISOString().split("T")[0] }); } } }
[/code] Meine Bedenken: [list] [*][b]Unnötige Kontrollen:[/b] Ich habe das Gefühl, dass ich nicht jede Buchung überprüfen sollte sein und es gibt eine bessere und effizientere Möglichkeit, nur eine Teilmenge der Buchung zu überprüfen? [*][b]Leistungsprobleme:[/b] Da die Anzahl der Ressourcen und Buchungen wächst, Dieser Ansatz lässt sich möglicherweise nicht gut skalieren. [/list] Wenn Sie ein ähnliches Problem angegangen sind oder Ideen haben, würde ich mich freuen, sie zu hören! Vielen Dank im Voraus für Ihre Vorschläge.
Ich programmiere einen Physiksimulator zur Simulation des statischen Verhaltens von im Wasser schwimmenden Objekten (hauptsächlich Schiffe). Die Objektposition wird durch die Eintauchtiefe...
Ich habe dieses Problem, in dem ich ein LED -Muster so erstellen möchte, dass das gleichmäßigste Licht in einem Bereich in einer Ebene 5 cm entfernt wird. Ich kann die Leistung der LEDs nicht einzeln...
Ich entworfene eine Android -E -Mail -Anwendung und benötige eine effiziente Synchronisierungsstrategie, die die Akkulaufzeit, die Netzwerkverwendung und die Konsistenz ausgleichen und gleichzeitig...
Ich versuche zu verstehen, wie der lokale Dominator radiusbasierte Analyse durchführt. Nach meinem Verständnis wird ein bestimmter Radius in ein Raster aufgeteilt, und jede Rasterzelle trifft eine...