javascript 如何创建一个函数来迭代多维数组,识别哪个数组是偶数,并返回偶数数组?

whhtz7ly  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(137)

我是一个n00b,我有这个挑战要做:

    • 说明**

编写一个名为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) // returns the array: [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]
];



// ------ TRY 1: ------

var getValidPassword = function (arr){
    
    for(var i = 0; i < loggedPasscodes.length; i++){
        var loggedPasscodesItem = loggedPasscodes[i].join('');          //This turns the array into a string, as we can see below:
            console.log('loggedPasscodes items ' + i + ' :' + loggedPasscodesItem);
      
        
            console.log('typeof loggedPasscodesItem: ' + typeof loggedPasscodesItem );
        
//How can I turn a string into an array? Doesnt make sense, as I can only evaluate if elements of array are even if I turn them into numbers.
        
//The below for loop enters the elements of each array, and returns numbers. 

        for(var j = 0; j < loggedPasscodes[i].length; j++){
           console.log('loggedPasscodes ' + [i] + ':' + loggedPasscodes[i][j]); 

//loggedPasscodes[i][j] gives us each of the numbers.
            
            
            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);
    • 我认为一个好的解决方案是查找loggedPasscodes [i][j]是否为偶数,并通过检查loggedPasscodes [i]是否与每个loggedPasscodes [i]相同来查看它们是否属于同一个数组-如果它们符合这两个要求,则以数组形式返回它们**

上面在else if语句中给了我一个警告,说eachArray超出了范围...
也许答案是遍历每个数字并计算它们是否为偶数,如果是偶数,. slice()通过指定包含该数字序列的每个数组的长度来遍历行,并将该数字序列作为一个数组返回(. push()to a new array),这样我们就可以得到array of [2,6,0,8]的结果了。
有人能帮我吗?

wgmfuz8q

wgmfuz8q1#

要检查数字是否为偶数,可以使用Remainder Operator%

// Function to check if a passed n Number is even.
// Retuns Boolean
const isEven = n => !(n % 2);

要检查所有数组值是否与特定条件匹配,请使用Array.prototype.every

[2,0,6,8].every(isEven);   // true
[9,0,6,8].every(isEven);   // false

要获取过滤后的Array,请使用Array.prototype.filter

arr.filter(pwd => pwd.every(isEven))

示例:***(剧透警告!)***

const isEven = n => !(n % 2);

const getValidPassword = arr => arr.filter(pwd => pwd.every(isEven));

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]
];

console.log(getValidPassword(loggedPasscodes));

相关问题