JS代码理解

时间:2016-03-21 13:58:17

标签: javascript

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());

需要逐行了解上述代码。我完全没有得到函数(a,b)部分可以任何人解释它。

1 个答案:

答案 0 :(得分:0)

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,并将其添加到prototype的{​​{1}}。简而言之,添加到原型使新函数可用于应用程序中类型为Array的任何对象。例如,您现在可以在代码的最后一行中调用Array :(因为arr.longest()的类型为arr

Array

现在有趣的部分。 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 } 需要一个排序回调。此回调应返回0,1或-1,以指示两个项目(此处名为Array.prototype.sorta,但这些名称是任意的)的顺序应该排序。

从阅读此功能看,项目按属性b排序。由于数组length是一个字符串数组,而字符串具有arr属性,因此这很好。

那么为什么0,1或-1?来自MDN: Array.prototype.sort() :(点击链接了解更多信息)

  

如果提供compareFunction,则对数组元素进行排序   根据比较函数的返回值。如果a和b是   比较两个要素,然后:

     

如果compareFunction(a,b)小于0,则将a排序为低于的索引   b,即a先出现。

     

如果compareFunction(a,b)返回0,则保留a和   b相对于彼此保持不变,但相对于所有人排序   不同的元素。注意:ECMAscript标准不保证   这种行为,因而并非所有浏览器(例如Mozilla版本   可以追溯到至少2003年)尊重这一点。

     

如果compareFunction(a,b)   如果大于0,则将b排序为低于。

的索引      

的compareFunction(一,   b)给定一对特定的一对时,必须始终返回相同的值   元素a和b作为它的两个参数。如果结果不一致   返回后排序顺序未定义。

修改

我错过了一些重要的代码细节:

函数length不只是对数组进行排序。当我第一次发布答案时,我读完了这一部分。如果我们查看以下代码段:

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函数返回数组中最长的字符串,首先按长度排序该数组,然后返回该排序数组中的第一项(索引为0)。