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, wordNum
qui représentent le nombre de mots et targetNum
le nombre de temps d'apprentissage cibles. words
Il s'agit d'un tableau de mots, et chaque objet mot contient id
deux count
attributs, 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 num
repré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 count
mot. 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 result
tableau et renvoyons enfin result
le 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...of
parcourons indexArr
chaque 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...of
parcourir 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