如果未插入任何数值,如何返回-1?

时间:2019-06-24 13:18:03

标签: javascript

我有一个问题。无论字符串数量如何,我都想忽略该字符串并记录第二高的数字。如果还没有插入数值,我也想返回-1。 有人可以帮忙吗?

secondHighestDigit = function(input) {

  var nums = [];
  for (var i = 0; i < input.length; i++) {
    nums.push(parseInt(input[i]));
  }
  nums.sort();

  return nums[nums.length - 2];
};

console.log(secondHighestDigit("4324"));
console.log(secondHighestDigit("ab341"));

第一个控制台日志有效,第二个控制台输出NaN。我尝试做出isNan语句,但无法正常工作。

5 个答案:

答案 0 :(得分:0)

<?php

namespace App\Exports;

use Auth;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class exportSearchResults implements FromCollection, WithHeadings
{
    private $searchResultRows;

    public function collection()
    {
        return $this->searchResultRows;
    }


    public function headings(): array {
         $this->searchResultRows = SearchResult::getByUserList($this->user_list_id)
            ->select( 'source_id' )
            ->groupBy( 'source_id' )
            ->orderBy('source_id', 'asc')
            ->get()
            ->toArray();
            ...
        if ($this->searchResultRows ...){
        return [
            'field',
            'value',
        ];
        } else {
          return ...
        }
    }

}

答案 1 :(得分:0)

您可以使用正则表达式测试提供的字符串中是否有任何数字。

secondHighestDigit = function(input) {

  if (/\d/.test(input)) {
    var nums = [];
    
    input.split("").forEach(num => {
      if(!isNaN(num)) nums.push(parseInt(num));
    });

    return nums.sort((a, b) => b - a)[1];
  } else {
    return -1;
  }
};

console.log(secondHighestDigit("4324"));
console.log(secondHighestDigit("ab341"));
console.log(secondHighestDigit("abaa"));

答案 2 :(得分:0)

您的工作检查问题:

if (isNaN(nums)){ console.log(-1) } 

nums始终是一个数组。评估为NaN的不是事物。当您使用NaN时,评估为parseInt(input[i])的事物是元素(即字符)。因此,您需要检查返回的 元素是否为NaN,而不是nums数组。

请参见以下示例:

secondHighestDigit = function(input) {

  var nums = [];
  for (var i = 0; i < input.length; i++) {
    nums.push(parseInt(input[i]));
  }
  nums.sort();
  
  var result = nums[nums.length - 2]; // store desired result
  if(!isNaN(result)) { // if the result IS a number (ie: not not a number)
    return result; // return the result stored away
  }
  return -1; // if we get to this part of the code, we know our number is NaN and so we can return -1
};

console.log(secondHighestDigit("4324")); // 4
console.log(secondHighestDigit("ab341")); // -1

答案 3 :(得分:0)

我这样解决

secondHighestDigit = function(input) {
  const a = input
    .split('')
    .filter(e => !isNaN(e))
    .sort()
    .filter((a,b,c) => c.indexOf(a) === b)
  return a.length >= 2 ? parseInt(a.slice(-2)[0]) : -1;
};

console.log("01010101", secondHighestDigit("01010101"));
console.log("1111", secondHighestDigit("1111"));
console.log("aaaaa", secondHighestDigit("aaaaa"));
console.log("4324", secondHighestDigit("4324"));
console.log("ab341", secondHighestDigit("ab341"));
console.log("1234561234123hasdjk", secondHighestDigit("1234561234123hasdjk"));

答案 4 :(得分:0)

||返回parseInt()的情况下,使用NaN运算符向数组添加-1怎么样?检查以下代码:

secondHighestDigit = function(input) {

  var nums = [];
  for (var i = 0; i < input.length; i++) {
    nums.push(parseInt(input[i]) || -1); // -1 if the int can't be parsed
  }
  nums.sort();

  return nums[nums.length - 2];
};

console.log(secondHighestDigit("4324"));
console.log(secondHighestDigit("ab341"));
console.log(secondHighestDigit("aaa")); // Array with no numbers, just to check if it returns -1

如果要处理字符串小于2个字符的情况,则也可以使用||运算符返回-1,将您的返回值替换为:

return nums[nums.length - 2] || -1; // -1 if the array is smaller than 2