首页 > 试题广场 >

现有一组人员年龄的数据,要求将这些人员的年龄按照从小到大的顺

[单选题]
现有一组人员年龄的数据,要求将这些人员的年龄按照从小到大的顺序进行排列起来,要怎样来实现
  • function numberSort(a,b)
    {
      return a - b;
    }
    var arr=new Array("23","6","12","35","76");
    document.write(arr.push(numberSort));
  • function numberSort(a,b)
    {
      return b - a;
    }
    var arr=new Array("23","6","12","35","76");
    document.write(arr.push(numberSort));
  • function numberSort(a,b)
    {
      return b-a;
    }
    var arr=new Array("23","6","12","35","76");
    document.write(arr.sort(numberSort));
  • function numberSort(a,b)
    {
      return a - b;
    }
    var arr=new Array("23","6","12","35","76");
    document.write(arr.sort(numberSort));
呃呃,觉得别人之前的解析 有误或者不妥!

arr.sort([compareFunction])
一、sort() 方法参数为空(即没有指明 compareFunction) ,元素按照转换为的字符串的诸个字符的 Unicode 位点进行排序,
本题不涉及,不详说。

二、sort() 方法参数指明 compareFunction ,数组会按照调用函数的返回值排序这句不懂没关系)。
如:
[3, 2, 1].sort(function (a, b) {
    return a - b;
});
它会将数字数组 [3, 2, 1] 按 小到大 排序后返回 更新后的数组 [1, 2, 3]。

执行的机制(两数比较,小的排在大的前面):
  • a - b < 0,那么 a 会被排列到 b 之前;
  • a - b = 0,a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
  • a - b > 0,那么 b 排列到 a 之前。

三、重点来了!!!

问:记住上面的 执行机制,我是不是就真正理解了 sort() 的用法了 ???
答:难说。。。

因为,sort(compreFunction) 中的 compreFunction(a, b) 参数的值 极其混乱!!!
极其混乱???

看这段代码在不同浏览器执行情况
let arr = [3, 2, 1];
arr.sort(function (a, b) {
    console.log(a, b, arr);
    return a - b;
});





而且同一浏览器中的不同版本运行效果也不一样!!!(取决于该版本对 sort() 执行算法吧???

四、那么复杂,如何快速掌握呢?

升序排序 return  a - b; 降序排序 return b - a。


学习传送门:


编辑于 2021-10-08 19:57:39 回复(1)
1. 使用sort进行排序,排序规则按照写的numberSort函数。
2. numberSort函数中,返回的值是负数,即a-b<0,那么位置不变,仍是a在前b在后。若a-b>0,则需要交换位置,交换之后:a在后b在前。
升序排序return a-b,降序排序return b-a。
编辑于 2019-08-13 23:44:55 回复(0)

:是正数即互换位置


发表于 2019-08-10 10:39:09 回复(1)
数组的sort方法接受一个比较函数:compareFun(a, b); 如果返回的值>0,则调换a,b位置,即b的位置在a的位置之前; 其余的情况(返回值≤0),a,b位置不变; 故升序的时候是a-b 降序的时候是b-a
发表于 2021-07-06 12:13:17 回复(0)
  • 从小到大排序:arr.sort((a, b) => a - b)
  • 从大到小排序:arr.sort((a, b) => b - a)
发表于 2022-08-17 23:39:44 回复(0)
偏新手方面理解sort()
1.它是用来排序一个数组,默认是从小到大,如果直接arr.sort()  ,那么它只能比较个位数,如果变成了多位数,会取第一位进行比较,后面的不会管
    arr=[1,2,6,8,4,2]         arr.sort()   // [1,2,2,4,6,8]
    arr=[1,6,45,21,13,47]    arr.sort()  //[1,13,21,45,47,6]  也有可能是// [13,1,21,47,45,6]
2.添加一个函数,可以让它对多位数进行比较,函数默认两个参数a和b,然后函数里面a-b或者b-a,答案分别是1和-1, 1为不换位置,-1换位置( 也就是正序和倒序)  语法跟题目是一样的
3.push是把一个值放到一个数组的最后一位,
发表于 2019-10-24 09:06:28 回复(1)
真恶心 手机上答题的时候最后一行不显示
发表于 2021-06-10 08:17:48 回复(0)
1. 使用sort进行排序,排序规则按照写的numberSort函数。 2. numberSort函数中,返回的值是负数,即a-b<0,那么位置不变,仍是a在前b在后。若a-b>0,则需要交换位置,交换之后:a在后b在前。 升序排序return a-b,降序排序return b-a。
发表于 2019-09-03 08:22:35 回复(1)
偏新手方面理解sort()
1.它是用来排序一个数组,默认是从小到大,如果直接arr.sort()  ,那么它只能比较个位数,如果变成了多位数,会取第一位进行比较,后面的不会管
    arr=[1,2,6,8,4,2]         arr.sort()   // [1,2,2,4,6,8]
    arr=[1,6,45,21,13,47]    arr.sort()  //[1,13,21,45,47,6]  也有可能是// [13,1,21,47,45,6]
2.添加一个函数,可以让它对多位数进行比较,函数默认两个参数a和b,然后函数里面a-b或者b-a,答案分别是1和-1, 1为不换位置,-1换位置( 也就是正序(升序)和倒序(降序))  语法跟题目是一样的
3.push是把一个值放到一个数组的最后一位。
发表于 2022-08-30 20:52:11 回复(0)
A
发表于 2022-08-10 20:25:50 回复(0)
A和D不是一摸一样?
发表于 2022-08-10 10:15:18 回复(0)
我觉得这道题有问题啊,这四个答案我都编写测了以下,结果都是不对的
发表于 2021-08-25 09:01:00 回复(0)
手机看不到最后一行 怎么做啊
发表于 2021-06-27 12:48:43 回复(0)
没看清备选答案
发表于 2021-05-03 14:12:45 回复(0)
  • a - b < 0,那么 a 会被排列到 b 之前;
发表于 2021-04-16 09:55:15 回复(0)
numberSort函数的返回值,为负数位置不变,为正数要交换位置。
发表于 2021-03-13 22:41:16 回复(0)
所以参数(a,b)是指哪个数????   ["23","6","12","35","76"],

function numberSort(a,b)
{
return a - b;
}
var arr=new Array("23","6","12","35","76");
document.write(arr.sort(numberSort));

返回 a -b 是将arr中的数一个一个去比较????
发表于 2020-08-17 19:54:21 回复(0)
升降ab,ba
发表于 2020-04-21 21:30:30 回复(0)
[1,2].sort((a,b)=>{return 1})
结果:[1,2]
[1,2].sort((a,b)=>{return -1})
结果:[2,1]

综上,我们可知sort()的回调函数返回值为大于0时,对调换 a 和 b 的值。

又如,
[1,2].sort((a,b)=>{return b-a})
结果:[2,1]
a - b > 0,也就是 a > b,然后调换位置。

说明,sort()默认的排序方法就是升序,而sort() 对两个数的大小判断是通过回调函数返回值得是否大于0来区分两个数的大小。
大于0,说明a大于b,然后调换两者的位置;
小于0,则证明a小于b符合升序规则,两者位置不变。
那么,如果我们想要降序,只需要将a 和 b 对比的结果反过来就行了。



发表于 2020-04-09 17:18:30 回复(0)
a–b>0 移项 小到大 b–a>0 大到小
发表于 2019-11-20 17:42:24 回复(0)