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

如何判断两个数组是否匹配?测验轮播答题后如何输出结果?

1. 如何检查两个数组是否匹配?

首先得明确“匹配”的核心定义——通常指两个数组长度相同,且对应位置的元素完全一致。这里分两种场景给出解决方案:

  • 处理基本数据类型数组(字符串、数字、布尔值这类)
    用数组的every()方法结合长度判断就能搞定,简洁又高效:

    function arraysMatch(arr1, arr2) {
      // 长度不同直接判定不匹配
      if (arr1.length !== arr2.length) return false;
      // 逐个比对对应位置的元素
      return arr1.every((item, index) => item === arr2[index]);
    }
    
    // 用法示例
    console.log(arraysMatch(['ja', 'nee'], ['ja', 'nee'])); // true
    console.log(arraysMatch(['ja', 'nee'], ['nee', 'ja'])); // false
    
  • 处理包含引用类型的数组(对象、嵌套数组这类)
    基本类型的比对方法会失效,这时候需要递归比对或者用JSON.stringify(注意后者有局限性):

    function arraysMatch(arr1, arr2) {
      if (arr1.length !== arr2.length) return false;
    
      for (let i = 0; i < arr1.length; i++) {
        const item1 = arr1[i];
        const item2 = arr2[i];
    
        // 嵌套数组递归检查
        if (Array.isArray(item1) && Array.isArray(item2)) {
          if (!arraysMatch(item1, item2)) return false;
        }
        // 对象用JSON.stringify简单比对(注意:对象属性顺序不同会被判定不匹配)
        else if (typeof item1 === 'object' && item1 !== null && typeof item2 === 'object' && item2 !== null) {
          if (JSON.stringify(item1) !== JSON.stringify(item2)) return false;
        }
        // 基本类型直接比对
        else if (item1 !== item2) {
          return false;
        }
      }
      return true;
    }
    

    提醒下:JSON.stringify无法处理函数、undefined、NaN这类特殊值,如果数组里有这些,建议用专门的深比较工具函数。


2. 实现测验轮播组件的结果打印功能

你已经搭好了基础的数组结构,接下来只需要在用户完成所有4道题后触发结果计算和打印逻辑就行,给你完整的实现思路和代码:

核心逻辑步骤:

  1. 每次用户点击“是/否”按钮时,把答案推入gebruikerant数组
  2. 每次push后检查数组长度是否等于4(题目总数)
  3. 达到长度后,统计正确答题数,然后把结果打印到控制台
  4. 可选:防止用户重复答题(比如禁用按钮或阻止重复push)

代码示例:

var antwoorden = ['ja', 'nee', 'nee', 'ja'];
var gebruikerant = [];

// 绑定给所有选项按钮的点击事件处理函数
function handleAnswerSelection(answer) {
  // 避免重复提交答案
  if (gebruikerant.length >= antwoorden.length) {
    console.log('你已经完成所有题目啦,不用再提交啦!');
    return;
  }

  // 将用户答案推入数组
  gebruikerant.push(answer);

  // 检查是否完成所有题目
  if (gebruikerant.length === antwoorden.length) {
    // 统计正确答题数量
    const correctAnswersCount = gebruikerant.reduce((total, userAns, index) => {
      return userAns === antwoorden[index] ? total + 1 : total;
    }, 0);

    // 打印详细结果到控制台
    console.log('🎉 你完成了所有题目!');
    console.log(`你的答案:${gebruikerant.join(', ')}`);
    console.log(`正确答案:${antwoorden.join(', ')}`);
    console.log(`答对了 ${correctAnswersCount} 题,正确率 ${(correctAnswersCount / antwoorden.length * 100).toFixed(0)}%`);

    // 可选:如果需要支持重新答题,清空用户答案数组
    // gebruikerant = [];
    // 同时可以在这里重置轮播组件到第一题
  }
}

// 假设你的按钮是这样绑定的(根据实际DOM结构调整)
// document.querySelectorAll('.answer-btn').forEach(btn => {
//   btn.addEventListener('click', () => handleAnswerSelection(btn.dataset.answer));
// });

补充说明:

  • 如果你的轮播组件是答完一题才切换到下一题,也可以在最后一题的提交按钮点击时触发结果计算,效果是一样的。
  • 建议给按钮加data-answer属性存储对应答案(比如data-answer="ja"),这样绑定事件时更方便获取答案值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:55:44