gpt4 book ai didi

javascript - 为什么将数字作为字符串传递到数组中会导致错误的结果?

转载 作者:行者123 更新时间:2023-11-28 12:57:48 25 4
gpt4 key购买 nike

我构建了一个函数,允许您传递数组并成功返回第二高和第二低的数字。但是,我对错误处理不熟悉,不明白为什么会失败:

getNos([5,"5",8]);

传入getNos([5,5,8])时工作正常;或传递数组,如 getNos(["5",8]);

有人可以解释一下这里发生了什么以及如何解决它吗?感谢您的帮助 - 函数代码如下:

function getNos(arr){

if (!Array.isArray(arr) || arr.length == 0 || arr.length == 1 || (arr.every(c => !isNaN(c)) == false)) {
throw 'Invalid Input';
} else {

var result;
var uniqueVals = Array.from(new Set(arr));
var highest = highestVal(arr);
var lowest = lowestVal(arr);

if (uniqueVals.length == 1) {
result = arr[0] + " " + arr[0];
} else if (arr.length == 2 || uniqueVals.length == 2) {
result = highest + " " + lowest;
} else {
arr = arr.filter(item => ((item !== highest) && (item !== lowest)));
var secondHighest = highestVal(arr);
var secondLowest = lowestVal(arr);

if (arr.length == 1) {
arr = arr.slice(arr.indexOf(secondHighest));
result = highestVal(arr);
} else {
result = secondLowest + " " + secondHighest;
}
}
return result;
}

function highestVal(a) { return a.reduce((a, b) => a > b ? a : b ) };
function lowestVal(a) { return a.reduce((a, b) => a < b ? a : b ) };
}

最佳答案

仔细遵循逻辑var uniqueVals = Array.from(new Set(arr))。当您有 [5,"5",8][5,5,8]["5"等数组时,此行将返回什么, 8]?

集合存储类型的唯一值。 "5"string 类型,而 5 是 number 类型。 highestVallowestVal 函数可以比较 "5"8,没有问题,但由于数组可以包含5 或 8 的 stringnumber ,那么您将得到返回的有趣值。

要解决此问题,在将 arr 传递给 Set 之前,您需要将所有值转换为单一类型,最好是 number

let numberArr = arr.map(el=>+el) 是实现此目的的一种方法,但您可能需要比这更好的数据验证。

关于javascript - 为什么将数字作为字符串传递到数组中会导致错误的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53377992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com