如何创建一个函数来遍历多维数组,确定哪个数字数组是偶数,并返回偶数数组?

问题描述 投票:0回答:2

我是新人,我有这个挑战要做:

说明

编写一个名为 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] 是否相同来查看它们是否属于同一个数组 -如果两者都满足,则以数组形式返回

上面在 else if 语句中给了我一个警告,说 eachArray 超出范围...

也许答案是通过单独的数字并评估它们是否偶数。如果它们是偶数,则通过指定包含该数字序列的每个数组的长度来 .slice() 行,并通过这样做将该数字序列作为数组返回(.push() 到新数组),所以我们可以得到 [2,6,0,8] 数组的结果?

有人能帮我解决这个问题吗?

javascript function multidimensional-array
2个回答
1
投票

要检查数字是否为偶数,您可以使用 余数运算符

%

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

检查all数组值是否匹配特定条件使用Array.prototype.every

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

要获得过滤后的数组,请使用 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));


0
投票

如果总是只有一个有效的数组,你可以使用它:

但是如果有多个有效的则忽略下一个,
否则(如果没有)这个函数返回

undefined

const
  getValidPassword = arr2D => [...arr2D.find( pwd => pwd.every(n => !(n&1)))]
, 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 ));
.as-console-wrapper {max-height: 100% !important;top: 0;}
.as-console-row::after {display: none !important;}

© www.soinside.com 2019 - 2024. All rights reserved.