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:
@@ -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,17 +422,32 @@ 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);
|
||||
return [];
|
||||
} 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();
|
||||
@@ -507,14 +524,12 @@ export default {
|
||||
} catch (e) {
|
||||
console.warn('Fehler beim Extrahieren von Vokabeln aus Übung:', e, exercise);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user