为了账号安全,请及时绑定邮箱和手机立即绑定

相同的代码在不同的设备上运行不同

相同的代码在不同的设备上运行不同

千万里不及你 2021-06-21 21:26:19
我是编码新手,仍在学习。我的朋友给了我一个任务来编写一个函数,该函数确实从数组中返回第二大数字,我已经设法使用 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" 应该是升序排序 但是无论我使用哪个运算符,排序都会失败并且只返回数组中的第二个数字
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

你应该返回一个数字,而不是一个布尔值。所以第一个是正确的。后者可能会在某些 javascript 引擎上偶然工作,但不能保证。


查看完整回答
反对 回复 2021-06-24
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

sortString默认情况下对数组进行排序。如果你传递一个比较器,那么它是一个function取决于两个参数和return

  • 负数,如果第一个参数小于第二个

  • 0 如果它们相等

  • 正,如果第一个参数大于第二个

使用逻辑运算符代替上述运算符是错误的。

但是,如果您有兴趣找到第二大数字,那么最好使用循环来完成:

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];

        }

    }

}

这比对数组排序更快,更重要的是,它不会为了找到第二大数字而破坏您的初始顺序。


查看完整回答
反对 回复 2021-06-24
  • 2 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信