如何判断两个数组是否匹配?测验轮播答题后如何输出结果?
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道题后触发结果计算和打印逻辑就行,给你完整的实现思路和代码:
核心逻辑步骤:
- 每次用户点击“是/否”按钮时,把答案推入
gebruikerant数组 - 每次push后检查数组长度是否等于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
相关产品推荐
相关产品推荐

