You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为数组中单词添加连续答对计数器并三连答对时删除该单词?

嘿,这个需求其实很常见,咱们可以通过给每个单词对象加个连续答对计数器的属性来解决,完全不用反复复制数组,代码会简洁很多。我给你捋捋具体实现思路和代码示例:

核心思路
  • 给每个单词对象新增一个streak属性,初始值设为0,专门用来记录连续答对的次数。
  • 用户作答后,根据对错更新对应单词的streak:答对就+1,答错直接重置为0(因为连续答对的中断了)。
  • 每次答对后检查streak是否等于3,如果是,就把这个单词从数组里移除,这样后续就不会再出这个单词的题目了。
具体代码示例

假设你的原始单词数组是这样的:

let vocabulary = [
  { word: "apple", translation: "苹果", definition: "一种常见的红色水果" },
  { word: "banana", translation: "香蕉", definition: "长条形的黄色水果" },
  { word: "orange", translation: "橙子", definition: "橙色的柑橘类水果" }
];

首先,给每个单词初始化streak属性(可以在数组创建时直接加,或者用循环批量添加):

// 批量添加streak属性
vocabulary.forEach(word => {
  word.streak = 0;
});

然后是处理用户作答的函数,接收当前题目对应的单词和用户是否答对的状态:

function handleAnswer(targetWord, isCorrect) {
  // 找到数组中对应的单词对象
  const wordIndex = vocabulary.findIndex(word => word.word === targetWord.word);
  if (wordIndex === -1) return; // 没找到的话直接返回

  if (isCorrect) {
    // 答对了,连续次数+1
    vocabulary[wordIndex].streak += 1;
    // 检查是否连续答对3次
    if (vocabulary[wordIndex].streak === 3) {
      // 从数组中移除该单词,直接操作原数组,高效无冗余
      vocabulary.splice(wordIndex, 1);
      console.log(`${targetWord.word} 已经连续答对3次,移除出题库!`);
    }
  } else {
    // 答错了,重置连续次数为0
    vocabulary[wordIndex].streak = 0;
  }
}
为什么这个方案更优?
  • 无冗余数组操作:直接操作原数组的元素,用splice移除达标单词,比反复复制数组节省内存和性能。
  • 状态跟踪清晰:每个单词的连续答对状态存在自身对象里,逻辑一目了然,后续维护也方便。
  • 可扩展性强:如果后续想调整连续答对的次数(比如改成5次),只需要修改判断条件里的数字就行,不用大改代码结构。

你可以这样模拟调用测试:

// 模拟连续答对apple三次
handleAnswer(vocabulary[0], true); // streak变成1
handleAnswer(vocabulary[0], true); // streak变成2
handleAnswer(vocabulary[0], true); // streak变成3,apple被移除
console.log(vocabulary); // 现在数组里只剩banana和orange了

// 模拟答对后答错的情况
handleAnswer(vocabulary[0], true); // streak=1
handleAnswer(vocabulary[0], false); // streak重置为0
handleAnswer(vocabulary[0], true); // streak变回1,不会触发移除

内容的提问来源于stack exchange,提问作者Dima M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:34:55