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);
return [];
}
}
},
methods: {
_extractVocabFromExercises(exercises) {
// Sicherstellen, dass exercises ein Array ist
if (!exercises) {
@@ -420,18 +422,33 @@ export default {
return [];
}
// Konvertiere zu Array falls nötig
// Konvertiere Vue Proxy oder Objekt zu Array
let exercisesArray = exercises;
if (!Array.isArray(exercises)) {
console.warn('[_extractVocabFromExercises] exercises ist kein Array, versuche zu konvertieren:', exercises);
// Falls es ein Objekt mit length ist, versuche es zu konvertieren
if (typeof exercises === 'object' && exercises.length !== undefined) {
// Prüfe ob es bereits ein Array ist (auch Vue Proxy-Arrays)
const isArrayLike = exercises.length !== undefined && typeof exercises.length === 'number';
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);
} else {
console.error('[_extractVocabFromExercises] Kann exercises nicht zu Array konvertieren:', exercises);
} catch (e) {
// 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 [];
}
}
} else if (!Array.isArray(exercises)) {
console.error('[_extractVocabFromExercises] exercises ist weder Array noch array-like:', exercises);
return [];
}
const vocabMap = new Map();
@@ -512,9 +529,7 @@ export default {
const result = Array.from(vocabMap.values());
console.log(`[_extractVocabFromExercises] Ergebnis:`, result.length, 'Vokabeln');
return result;
}
},
watch: {
courseId(newVal, oldVal) {
if (newVal !== oldVal) {
// Reset Flags beim Kurswechsel