我是新人,我有这个挑战要做:
说明
编写一个名为 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] 数组的结果?
有人能帮我解决这个问题吗?
要检查数字是否为偶数,您可以使用 余数运算符
%
:
// 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));
如果总是只有一个有效的数组,你可以使用它:
但是如果有多个有效的则忽略下一个,
否则(如果没有)这个函数返回
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;}