JavaScript中查找多数组重复值及重复次数的技术问题
解决多数组中数字重复次数统计问题
先帮你梳理下现有代码里的小问题,再实现重复次数统计的功能:
一、修复现有代码的错误
你的multipleArray函数和调用部分存在两处明显错误:
- 函数内变量名写错:
arrayOfArrays.push(niz35)应该改为arrayOfArrays.push(array35)——你生成的数组变量是array35,niz35是未定义的变量; - 函数传参错误:
console.log(multipleArray(arrayOfArrays))要改成console.log(multipleArray(total_arrays))——函数需要接收的是要生成的数组总数,也就是你定义的total_arrays变量。
另外我还补充了代码规范细节:用let/const声明变量避免全局污染,把for循环的z <= total_number改成z < total_number(否则会多生成一个数组)。修复后的基础代码如下:
function createArray35() { const array35 = []; let i = 0; do { const rng = Math.floor(Math.random() * 48) + 1; if (!array35.includes(rng)) { array35.push(rng); i++; } } while (i < 35) return array35 } function multipleArray(total_number) { const arrayOfArrays = []; for (let z = 0; z < total_number; z++) { const array35 = createArray35(); arrayOfArrays.push(array35); } return arrayOfArrays; } const total_arrays = 3; // 想要创建的array35总数 const multipleArrays = multipleArray(total_arrays); console.log('生成的多数组:', multipleArrays);
二、实现重复次数统计功能
接下来编写一个统计函数,遍历所有子数组,记录每个数字的出现次数:
function countDuplicates(multipleArrays) { const countMap = {}; // 遍历每一个子数组 multipleArrays.forEach(subArray => { // 遍历子数组中的每个数字 subArray.forEach(num => { // 统计次数:存在则+1,不存在则初始化为1 countMap[num] = (countMap[num] || 0) + 1; }); }); // 按你想要的格式输出结果 for (let num = 1; num <= 48; num++) { console.log(`数字${num}重复了${countMap[num] || 0}次`); } return countMap; // 返回统计结果对象,方便后续复用 } // 调用统计函数 const duplicateCounts = countDuplicates(multipleArrays);
三、额外优化建议
如果需要生成大量数组(比如上千个),原createArray35里的array35.includes(rng)性能会比较差(数组查找是O(n)复杂度)。可以用Set来优化生成速度,Set的查找是O(1)复杂度:
function createArray35() { const numSet = new Set(); while (numSet.size < 35) { const rng = Math.floor(Math.random() * 48) + 1; numSet.add(rng); } return Array.from(numSet); }
内容的提问来源于stack exchange,提问作者Marko Jordanovic
相关产品推荐
相关产品推荐

