Home  >  Q&A  >  body text

javascript - 关于sort()疑问

var myArray = new Array("Wind", "Rain", "Fire");
var sortFn = function(a, b){
  if (a[a.length - 1] < b[b.length - 1]) return -1;
  if (a[a.length - 1] > b[b.length - 1]) return 1;
  if (a[a.length - 1] == b[b.length - 1]) return 0;
}
myArray.sort(sortFn); // sorts the array so that myArray = ["Wind","Fire","Rain"]

上面的一段代码是 给一个数组元素排序,这个我搞不懂 匿名函数function 里的参数 a b 指的都是 数组myArray 吗,具体是怎么比较大小的 求大神指点。

PHP中文网PHP中文网2749 days ago325

reply all(1)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 15:13:31

    并不是是这样的. 这里的 a b 指的是myArray中的那些字符串. sort是通用排序, Chrome用快速或选择而Firefox用归并(各有喜好, 不过肯定是通用排序), 在这过程中, sort会比较每个元素的大小, 來决定这个元素排好序之后的位置. 对于数字或者单个字符这样好说, 但是如果是复杂的数据类型比如对象, sort的比较规则未必能满足我们的需求. 这时, 它可以调用sortFn.

    sortFn的功能是这样的: 它的两个参数都是数组里的元素, 如果按照我们希望的规则, 第一个参数比第二个参数"大", 则返回正值, 相等为0, 小于为负值. 这里我们的规则是: 比较这些字符串最后一个字符的大小, 例如 sortFn("Wind", "Rain") < 0, 因为 'd' < 'n'. 最后这个数组中因为 'd' < 'e' && 'e' < 'n', 所以有了注释里的顺序.

    reply
    0
  • Cancelreply