js数组排列问题

如何理解数组排列,菜鸟求高手详细指教,感谢

function compare(value1,value2) {       //不太理解函数里的参数,两个参数是如何比较的呢?
    if (value1 < value2) {
        return -1;
    } else if (value1 > value2) {
        return 1;
    } else {
        return 0;
    }
}
var box = [2,1,5,10,15];
alert(box.sort(compare));
阅读 3k
4 个回答

arr.sort(compareFunction) 如果没有指明 compareFunction
,那么元素会按照转换为的字符串的诸个字符的Unicode位点进行排序。例如 "Banana" 会被排列到 "cherry"
之前。数字比大小时,9 出现在 80 之前,但这里比较时数字会先被转换为字符串,所以 "80" 比 "9" 要靠前。

如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前; 如果 compareFunction(a,
b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如
Mozilla 在 2003 年之前的版本); 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

因为array的sort方法可以指定传入一个函数作为计算函数。
compare中的value1和value2分别是sort进行排序时候进行对比的两个值,根据比较的返回值进行交换位置的操作,比如value1 > value2时候return 1就会将value1和value2进行交换。

sort 排序,按照升序排序,但这个"序"是你自己定义的。排序的算法JS标准并没有规定,看浏览器实现。

两个东西比较有三种结果:小于LT、等于EQ、大于GT, 像C里那样小于0的数表示LT,等于0的表示EQ,大于0表示GT

compare函数表示你自己定义的"序"。 如果你定义value1小于value2(返回一个LT),那么value1排在前面。 如果定义value1大于value2(返回一个GT)则value2排在value1前面。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题