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

Javascript 相同的代码在不同的设备上运行不同,javascript,arrays,sorting,Javascript,Arrays,Sorting,我不熟悉编码,还在学习。我的朋友让我写一个函数,返回数组中第二高的数字,我用array.prototype.sort()完成了这个任务。他说用“”替换“-”以使代码更清晰,这就是问题的根源 我在windows上使用VCS,它不能正常工作。 我朋友用的是mac电脑,一切正常。 在JSFIDLE上试用,一切正常 const secondMax = (arr) => { return arr.sort((a, b) => b - a)[1]; //does return the cor

我不熟悉编码,还在学习。我的朋友让我写一个函数,返回数组中第二高的数字,我用array.prototype.sort()完成了这个任务。他说用“”替换“-”以使代码更清晰,这就是问题的根源

我在windows上使用VCS,它不能正常工作。 我朋友用的是mac电脑,一切正常。 在JSFIDLE上试用,一切正常

const secondMax = (arr) => {
  return arr.sort((a, b) => b - a)[1]; //does return the correct number after console.log()
};
const secondMax=(arr)=>{
返回arr.sort((a,b)=>a
“ab”应按升序排序
但无论我使用哪种运算符,排序都会失败,只返回数组中的第二个数字

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

sort
默认情况下将数组排序为
String
。如果您传递了一个比较器,那么它是一个
函数
,它将取决于两个参数,并且
返回

  • 如果第一个参数小于第二个参数,则为负值
  • 如果它们相等,则为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];
        }
    }
}
var largestNumbers=[];
var firstIndex=(arr[0]

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

您的朋友不正确。
.sort()
比较器必须返回小于0、0或大于0的数值;a
如果您不确定要传递什么或返回什么,可以使用mdn(…)
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];
        }
    }
}