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

我是编码新手,仍在学习。我的朋友给了我一个任务来编写一个函数,该函数确实从数组中返回第二大数字,我已经设法使用 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" 应该是升序排序 但是无论我使用哪个运算符,排序都会失败并且只返回数组中的第二个数字


千万里不及你
浏览 175回答 2
2回答

森林海

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

慕田峪4524236

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++) {&nbsp; &nbsp; if (largestNumbers[1] < arr[i]) {&nbsp; &nbsp; &nbsp; &nbsp; if (largestNumbers[0] < arr[i]) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; largestNumbers[1] = largestNumbers[0];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; largestNumbers[0] = arr[i];&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}这比对数组排序更快,更重要的是,它不会为了找到第二大数字而破坏您的初始顺序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript