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);
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user