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

时间:2019-06-09 17:30:50

标签: javascript arrays sorting

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

sort默认将数组排序为String。如果您通过比较器,则它是一个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];
        }
    }
}

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