[英]Same code runs differently on different devices
我是编码的新手,还在学习。 我的朋友给了我一个任务来编写一个从数组中返回第二高数字的函数,我已经设法使用array.prototype.sort()。 他说要用“<”或“>”替换“ - ”以使代码更清晰,这就是问题的起点。
我在Windows上使用VCS,但它无法正常工作。 我的朋友使用mac,一切正常。 在jsfiddle上尝试过,一切正常。
const secondMax = (arr) => {
return arr.sort((a, b) => b - a)[1]; //does return the correct number after console.log()
};
const secondMax = (arr) => {
return arr.sort((a, b) => a < b)[1]; //does not
};
“a <b”应该排序降序“a> b”应该按升序排序但是无论我使用哪个运算符,排序都会失败,只返回数组中的第二个数字
你应该返回一个数字,而不是一个布尔值。 所以第一个是正确的。 后者可能会在某些javascript引擎上偶然发挥作用,但并不能保证。
sort
默认将数组sort
为String
。 如果你传递一个比较器,那么它是一个依赖于两个参数并return
的function
:
使用逻辑运算符而不是上述错误是错误的。
但是,如果您有兴趣找到第二大数字,那么最好使用一个循环:
var largestNumbers = [];
var firstIndex = (arr[0] < arr[1]) ? 1 : 0;
largestNumbers.push(arr[firstIndex]);
largestNumbers.push(arr[1 - firstIndex]);
for (var i = 2; i < arr.length; i++) {
if (largestNumbers[1] < arr[i]) {
if (largestNumbers[0] < arr[i]) {
largestNumbers[1] = largestNumbers[0];
largestNumbers[0] = arr[i];
}
}
}
这比排序数组更快,更重要的是,它不会破坏您的初始订单只是为了找到第二大数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.