我有一个问题。无论字符串数量如何,我都想忽略该字符串并记录第二高的数字。如果还没有插入数值,我也想返回-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语句,但无法正常工作。
答案 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