如果数组包含所有整数,我想检查返回true,否则返回false。我正在尝试使用每种方法MDN docs every。
因此,如果给出'1234',它将返回true,如果给出'123a',它将返回false。
function validatePIN (pin) {
pinArray = pin.split("");
if (pinArray.length === 4 || pinArray.length === 6) {
if (pinArray.every(Number.isInteger()) === true;) {
return true
}};
每个元素如何将元素传递给isInteger以便它可以测试它?
答案 0 :(得分:4)
即使您修复了语法错误并将Number.isInteger
作为函数传递,也无效。
function wrongValidatePIN (pin) {
var pinArray = pin.split(""); // <-- array of strings
if (pinArray.length === 4 || pinArray.length === 6) {
if (pinArray.every(Number.isInteger)) { // <-- isInteger works with numbers
return true
}}
return false
}
console.log(wrongValidatePIN('1234'))
你需要这样的东西
function validatePIN (pin) {
var pinArray = pin.split(""); // <-- array of strings
return (pinArray.length === 4 || pinArray.length === 6)
&& pinArray.every(char => !Number.isNaN(Number.parseInt(char, 10)))
}
console.log(validatePIN('1234'), validatePIN('123a'))
或者你可以使用正则表达式
function validatePin(pin) {
return /^(\d{4}|\d{6})$/.test(pin)
}
console.log(validatePin('1234'), validatePin('123456'),
validatePin('12345'), validatePin('123a'))
答案 1 :(得分:3)
正如注释所述,isInteger函数可以作为参数传递,方法是调用pinArray.every(Number.isInteger)
而不是一次调用它(或者通过在函数.every(c=>Number.isInteger(c))
中提供它,但是传递函数本身更简洁)
但是,它不太可能提供您期望的结果,因为isInteger
检查该值是否为实际整数,而不是将该值解析为1。
可以使用pinArray.map(parseFloat).every(Number.isInteger);
但随后使用!pinArray.some(isNaN)
这可以使功能:
function validatePIN (pin) {
return (pin.length === 4 || pin.length === 6)
&& ![...pin].some(isNaN);
}
但是作为最后一点,正则表达式是针对这种类型的检查而做的,这里可能更适合
答案 2 :(得分:2)
当你传递号码时,你的pin.split("")
将永远无法工作。 1234
作为论据。首先转换为字符串,然后拆分pin.toString().split("")
。
现在在.every()
函数内部,我们通过执行+number
将字符串转换为数字。
return pinArray.every(number => Number.isInteger(+number));
.every()
返回true或false。
这是工作示例。
function validatePIN(pin) {
var pinArray = pin.toString().split("");
if (pinArray.length === 4 || pinArray.length === 6) {
// returns true or false
// +number casts string into number
return pinArray.every(number => Number.isInteger(+number));
}
// We assume that every PIN is not valid
return false;
};
console.log('test1', validatePIN(1234)); // true
console.log('test2', validatePIN('1234')); // true
console.log('test3', validatePIN('123a')); // false
console.log('test4', validatePIN('0001')); // true