Javascript - 在数组元素上检查isInteger的每个方法

时间:2017-06-20 08:04:51

标签: javascript arrays

如果数组包含所有整数,我想检查返回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以便它可以测试它?

3 个答案:

答案 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