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

如何编写getValidPassword函数筛选二维数组中的全偶数子数组

编程问题:筛选全偶数元素的密码数组

需求说明

编写名为getValidPassword的函数,接收二维数组为参数,每个子数组代表一个密码,需找出所有数字均为偶数的密码并返回。

示例

var loggedPasscodes =[
    [1, 4, 4, 1],
    [1, 2, 3, 1],
    [2, 6, 0, 8],
    [5, 5, 5, 5],
    [4, 3, 4, 3, 8],
    [4, 3, 2, 3, 9]
];
getValidPassword(loggedPasscodes) // 返回数组: [2, 6, 0, 8]

尝试的代码及问题

var loggedPasscodes = [
    [1, 4, 4, 2],
    [1, 2, 3, 1],
    [2, 2, 2, 1],
    [5, 5, 5, 5],
    [4, 3, 4, 3],
    [4, 1, 4, 8],
    [2, 6, 0, 8],
    [6, 2, 8, 1]
];

var getValidPassword = function (arr){
    
    for(var i = 0; i < loggedPasscodes.length; i++){
        var loggedPasscodesItem = loggedPasscodes[i].join('');          
            console.log('loggedPasscodes items ' + i + ' :' + loggedPasscodesItem);
            console.log('typeof loggedPasscodesItem: ' + typeof loggedPasscodesItem );
        
        for(var j = 0; j < loggedPasscodes[i].length; j++){
           console.log('loggedPasscodes ' + [i] + ':' + loggedPasscodes[i][j]); 
            
            if(loggedPasscodes[i] >= '0') && (loggedPasscodes[i][j] % 2 === 0)) {
                
            var eachPasscodeString = loggedPasscodes[i];
             
            var eachArray = Array.from(eachPasscodeString, Number);
                console.log('eachArray ' + i + ': ' + eachArray);
          
            } else if ((loggedPasscodes[i) >= '1') && (loggedPasscodes[i][j] % 2 ===0)){
                console.log('eachArray ' + i + ': ' + eachArray);

            }
                
        }
    }
};

getValidPassword(loggedPasscodes);

遇到的问题:

  • 出现eachArray作用域警告
  • 逻辑混乱,无法正确筛选出全偶数的子数组
  • 代码存在语法错误(括号不匹配)

问题分析与解决方案

代码错误点梳理

  1. 未使用函数参数:函数接收的arr参数未被使用,反而依赖全局变量loggedPasscodes,导致函数无法复用。
  2. 语法错误:if条件中括号不匹配,且loggedPasscodes[i] >= '0'是将数组与字符串比较,逻辑完全错误。
  3. 作用域问题:eachArray在if块内声明,却在else if块中引用,会导致变量未定义的报错。
  4. 逻辑偏差:仅检查单个元素是否为偶数,未判断整个子数组的所有元素是否都满足条件。

正确实现思路

  1. 遍历输入二维数组中的每一个子数组。
  2. 对每个子数组,验证所有元素是否都是偶数。
  3. 收集所有符合条件的子数组,最终返回这个结果集合。

实现代码

简洁写法(利用数组方法)

function getValidPassword(arr) {
    // filter筛选符合条件的子数组,every检查子数组所有元素是否为偶数
    return arr.filter(passcode => passcode.every(num => num % 2 === 0));
}

基础for循环写法(适合新手理解)

function getValidPassword(arr) {
    const validPasswords = [];
    // 遍历每个子数组
    for (let i = 0; i < arr.length; i++) {
        const currentPasscode = arr[i];
        let isAllEven = true;
        // 检查当前子数组的每个元素
        for (let j = 0; j < currentPasscode.length; j++) {
            const num = currentPasscode[j];
            // 如果有一个元素不是偶数,标记为无效并跳出循环
            if (num % 2 !== 0) {
                isAllEven = false;
                break;
            }
        }
        // 如果全是偶数,加入结果数组
        if (isAllEven) {
            validPasswords.push(currentPasscode);
        }
    }
    return validPasswords;
}

代码说明

  • 简洁写法:Array.filter()用于筛选出满足条件的子数组,Array.every()用于验证子数组中的所有元素是否都符合“是偶数”的条件,两者结合一行代码即可完成需求。
  • 基础写法:通过嵌套for循环手动遍历,用isAllEven标记当前子数组是否全为偶数,避免逻辑混乱,更适合新手理解变量作用域和循环逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:00:42