Refactor _extractVocabFromExercises method for improved array handling

- Enhanced the method to better handle various input types, including array-like objects, with detailed console logging for conversion attempts and errors.
- Implemented a fallback mechanism for manual conversion of non-array inputs, ensuring robustness in vocabulary extraction.
- Updated comments for clarity on input expectations and processing logic, improving maintainability.
This commit is contained in:
Torsten Schulz (local)
2026-01-20 00:10:51 +01:00
parent cf97a3ba5e
commit 7cd946181e

View File

@@ -412,7 +412,9 @@ export default {
console.error('Fehler in importantVocab computed property:', e); console.error('Fehler in importantVocab computed property:', e);
return []; return [];
} }
}
}, },
methods: {
_extractVocabFromExercises(exercises) { _extractVocabFromExercises(exercises) {
// Sicherstellen, dass exercises ein Array ist // Sicherstellen, dass exercises ein Array ist
if (!exercises) { if (!exercises) {
@@ -420,18 +422,33 @@ export default {
return []; return [];
} }
// Konvertiere zu Array falls nötig // Konvertiere Vue Proxy oder Objekt zu Array
let exercisesArray = exercises; let exercisesArray = exercises;
if (!Array.isArray(exercises)) {
console.warn('[_extractVocabFromExercises] exercises ist kein Array, versuche zu konvertieren:', exercises); // Prüfe ob es bereits ein Array ist (auch Vue Proxy-Arrays)
// Falls es ein Objekt mit length ist, versuche es zu konvertieren const isArrayLike = exercises.length !== undefined && typeof exercises.length === 'number';
if (typeof exercises === 'object' && exercises.length !== undefined) {
if (!Array.isArray(exercises) && isArrayLike) {
console.log('[_extractVocabFromExercises] exercises ist kein Array, aber array-like, konvertiere...');
// Versuche Array.from (funktioniert mit iterierbaren Objekten und Array-like Objekten)
try {
exercisesArray = Array.from(exercises); exercisesArray = Array.from(exercises);
} else { } catch (e) {
console.error('[_extractVocabFromExercises] Kann exercises nicht zu Array konvertieren:', exercises); // Fallback: Manuelle Konvertierung
try {
exercisesArray = [];
for (let i = 0; i < exercises.length; i++) {
exercisesArray.push(exercises[i]);
}
} catch (e2) {
console.error('[_extractVocabFromExercises] Kann exercises nicht zu Array konvertieren:', exercises, e2);
return []; return [];
} }
} }
} else if (!Array.isArray(exercises)) {
console.error('[_extractVocabFromExercises] exercises ist weder Array noch array-like:', exercises);
return [];
}
const vocabMap = new Map(); const vocabMap = new Map();
@@ -512,9 +529,7 @@ export default {
const result = Array.from(vocabMap.values()); const result = Array.from(vocabMap.values());
console.log(`[_extractVocabFromExercises] Ergebnis:`, result.length, 'Vokabeln'); console.log(`[_extractVocabFromExercises] Ergebnis:`, result.length, 'Vokabeln');
return result; return result;
}
}, },
watch: {
courseId(newVal, oldVal) { courseId(newVal, oldVal) {
if (newVal !== oldVal) { if (newVal !== oldVal) {
// Reset Flags beim Kurswechsel // Reset Flags beim Kurswechsel