Conception simple du système d'apprentissage du vocabulaire

Ceci est une conception de système d'apprentissage de mots.

Système d'apprentissage de mots. Méthode de construction, initialisez le nombre de mots et le nombre de fois cible.

learn(num), renvoie le numéro de séquence des mots sélectionnés triés du petit au grand tableau. Si num est supérieur au nombre de mots wordNum, renvoie wordNum mots. Si num est inférieur au nombre de mots wordNum, renvoie num mots.

Les temps d'apprentissage restants du mot sélectionné doivent être supérieurs à zéro. Privilégiez la sélection des mots avec un grand nombre de temps d'apprentissage restants. Si les temps d'apprentissage restants sont les mêmes, choisissez le mot avec un petit numéro d'ordre. Après l'apprentissage, le nombre de mots restants sera réduit de un.

La méthode de réinitialisation réinitialise le nombre de mots restant dans le tableau au nombre cible initial de temps d'apprentissage.

méthode de requête, interrogez combien de mots il reste à apprendre.

Voici la conception d'une classe WordLearningSys qui répond aux exigences :

class WordLearningSys {
    
    
    constructor(wordNum, targetNum) {
    
    
        this.wordNum = wordNum;
        this.targetNum = targetNum;
        this.words = [];
        for (let i = 0; i < wordNum; i++) {
    
    
            let word = {
    
    
                id: i,
                count: targetNum
            };
            this.words.push(word);
        }
    }

    learn(num) {
    
    
        let count = Math.min(num, this.wordNum);
        let result = [];
        let selectedWords = this.words.filter(word => word.count > 0)
                                      .sort((a, b) => b.count - a.count || a.id - b.id)
                                      .slice(0, count);
// 只有挑选到的单词才需要将学习的次数减一
        for (let word of selectedWords) {
    
    
            word.count--;
            result.push(word.id);
        }
        return result;
    }

reset(indexArr) {
    
    
        for (let index of indexArr) {
    
    
// 校验了一下
            if (index >= 0 && index < this.wordNum) {
    
    
                this.words[index].count = this.targetNum;
            }
        }
    }

query() {
    
    
        let count = 0;
        for (let word of this.words) {
    
    
            if (word.count > 0) {
    
    
                count++;
            }
        }
        return count;
    }
}

Dans cette implémentation, la classe WordLearningSys a trois attributs, wordNumqui représentent le nombre de mots et targetNumle nombre de temps d'apprentissage cibles. wordsIl s'agit d'un tableau de mots, et chaque objet mot contient iddeux countattributs, qui représentent respectivement le numéro de série du mot et le nombre de temps d'apprentissage restant.

learn(num)La méthode accepte un nombre numreprésentant le nombre de mots à apprendre. Dans la méthode, nous calculons d'abord le nombre réel de mots qui doivent être appris count, puis utilisons filter()la méthode pour filtrer les mots dont les temps d'apprentissage restants sont supérieurs à zéro, et utilisons sort()la méthode pour trier par les temps d'apprentissage et les numéros de série, puis utilisez slice()la méthode pour sélectionner le premier countmot. Après l'apprentissage, nous décrémentons de un les temps d'apprentissage restants du mot sélectionné, ajoutons le numéro de séquence du mot au resulttableau et renvoyons enfin resultle tableau.

reset()Le procédé reçoit un tableau de numéros de série indexArr, indiquant les numéros de série des mots dont les temps d'apprentissage doivent être réinitialisés. Dans la méthode, nous for...ofparcourons indexArrchaque numéro de série du tableau, vérifions si le numéro de série se situe dans la plage valide, puis réinitialisons les temps d'apprentissage restants du mot correspondant aux temps d'apprentissage cibles.

query()La méthode est utilisée pour demander combien de mots il reste à apprendre. Dans la méthode, nous utilisons pour for...ofparcourir tous les mots, compter le nombre de mots avec des temps d'apprentissage restants supérieurs à zéro et les renvoyer.

Points de connaissance impliqués

Pour trier le tableau d'objets, triez d'abord selon l'âge du plus ancien au plus jeune, et si l'âge est le même, triez selon l'ordre lexicographique des noms.

let arr = [
    {
    
     name: "Alice", age: 22 },
    {
    
     name: "Bob", age: 21 },
    {
    
     name: "Charlie", age: 22 },
    {
    
     name: "David", age: 20 }
];

arr.sort((a, b) => (b.age - a.age)||a.name.localeCompare(b.name)
);
let arr = [
    {
    
     name: "Alice", age: 22 },
    {
    
     name: "Bob", age: 21 },
    {
    
     name: "Charlie", age: 22 },
    {
    
     name: "David", age: 20 }
];

arr.sort((a, b) => 
{
    
    
    if (a.age !== b.age) {
    
    
        return b.age - a.age;
    } else {
    
    
        return a.name.localeCompare(b.name);
    }

}
);

console.log(arr);

Exemple
pour trier un tableau d'objets

Supongo que te gusta

Origin blog.csdn.net/qq_43720551/article/details/131231779
Recomendado
Clasificación