簡體   English   中英

相同的代碼在不同的設備上運行不同

[英]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默認將數組sortString 如果你傳遞一個比較器,那么它是一個依賴於兩個參數並returnfunction

  • 如果第一個參數小於第二個參數,則為負數
  • 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];
        }
    }
}

這比排序數組更快,更重要的是,它不會破壞您的初始訂單只是為了找到第二大數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM