簡體   English   中英

JS代碼理解

[英]JS code understanding

var arr = [
"rohan",
"markandeya",
"hanumante",
"sapan",
"Ritesh"
];

Array.prototype.longest=function() {
return this.sort(
  function(a,b) {  
    if (a.length > b.length) return -1;
    if (a.length < b.length) return 1;
      return 0
  }
)[0];
}
alert(arr.longest());

需要逐行理解上面的代碼。 我完全沒有得到 function(a,b) 部分任何人都可以解釋它。

var arr = [
"rohan",
"markandeya",
"hanumante",
"sapan",
"Ritesh"
];

這定義了一個字符串數組並將其分配給變量arr

Array.prototype.longest=function() {
  return this.sort(
    function(a,b) {  
      if (a.length > b.length) return -1;
      if (a.length < b.length) return 1;
        return 0
    }
  )[0];
}

這將創建一個longest的新函數並將其添加到Arrayprototype中。 簡而言之,添加到原型中可以使應用程序中任何具有Array類型的對象都可以使用新函數。 例如,您現在可以調用arr.longest()如代碼的最后一行所示:(因為arrArray類型)

alert(arr.longest());

現在是有趣的部分。 Array.prototype已經包含一個sort函數。 此函數需要一個compare function的參數。 換句話說,您必須通過描述如何比較兩個項目以查看哪個項目在排序過程中首先出現來定義數組中的項目如何排序 這個函數在這里定義為:

   function(a,b) {  
      if (a.length > b.length) return -1;
      if (a.length < b.length) return 1;
        return 0
    }

現在,正如我所說, Array.prototype.sort需要一個排序回調。 此回調應返回 0、1 或 -1 以指示應排序的兩個項目(此處命名為ab ,但這些名稱是任意的)的順序。

從閱讀這個函數來看,這些項目似乎是按屬性length排序的。 由於您的數組arr是一個字符串數組,並且字符串有一個length屬性,所以這很好用。

那么為什么是 0、1 或 -1? 來自MDN:Array.prototype.sort() :(點擊鏈接了解更多信息)

如果提供了 compareFunction,則數組元素將根據比較函數的返回值進行排序。 如果 a 和 b 是要比較的兩個元素,則:

如果 compareFunction(a, b) 小於 0,則將 a 排序到比 b 低的索引,即 a 在前。

如果 compareFunction(a, b) 返回 0,則使 a 和 b 彼此保持不變,但相對於所有不同元素進行排序。 注意:ECMAscript 標准不保證這種行為,因此並非所有瀏覽器(例如至少可以追溯到 2003 年的 Mozilla 版本)都尊重這一點。

如果 compareFunction(a, b) 大於 0,則將 b 排序到比 a 低的索引。

當給定一對特定的元素 a 和 b 作為它的兩個參數時,compareFunction(a, b) 必須始終返回相同的值。 如果返回不一致的結果,則排序順序未定義。

編輯

我錯過了一些重要的代碼細節:

函數longest不只是對數組進行排序。 當我第一次發布我的答案時,我閱讀了這部分。 如果我們看下面的片段:

return this.sort(
  function(a,b) {  
    if (a.length > b.length) return -1;
    if (a.length < b.length) return 1;
      return 0
  }
)[0];

注意return[0]部分。 正如我所解釋的, this.sort將根據字符串長度(最長的在前)對數組arr排序。 然后,排序函數的結果的第一項被[0]取走。 第一項是最長的,因為數組已排序。 然后由函數longest返回 因此,實際上, longest函數返回數組中最長的字符串,首先按長度對該數組進行排序,然后返回該排序數組中的第一項(索引為 0)。

暫無
暫無

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

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