首页 > 试题广场 >

以下代码执行后,array的结果是?

[单选题]
以下代码执行后,array的结果是?
var array=[-1,1,3,4,6,10];
array.sort((a,b)=>Math.abs(a-3)-Math.abs(b-3));


  • [10,-1,6,1,4,3]
  • [10,6,4,3,1,-1]
  • [3,4,1,6,-1,10]
  • [-1,1,3,4,6,10]
推荐

答案:C
解析:
array. sort(sortFunction)是按照sortFunction结果大小排序。

一言不合先把比较的对象定义在数组上方,再手工分析

class Untitled {
    public static void main(String[] args) {
    //4 2 0 1 3 7
    var array=[-1,1,3,4,6,10]; 
    array.sort((a,b)=>Math.abs(a-3)-Math.abs(b-3));        System.out.println(array);

    }
}

发现最小的是算好后的第三个数字,对应原数组原位置上面是,3。
看看选项中只有一个是以3排在前面的数组。
好了,后面的不用比了。
就是C。

编辑于 2019-04-26 14:26:31 回复(17)
选C。
sort() 方法用于对数组的元素进行排序,参数决定排序的顺序。
  • 原数组var array=[-1,1,3,4,6,10];
  • 参数(a,b)=>Math.abs(a-3)-Math.abs(b-3):即数值减3的绝对值[4,2,0,1,3,7]作为参数决定排序。
  • 根据绝对值减3大小排列[0,1,2,3,4,7],对应的原数组排序后为[3,4,1,6,-1,10]

编辑于 2019-04-25 22:24:23 回复(12)
选C;
(a,b)=>Math.abs(a-3)-Math.abs(b-3);
箭头函数表示:当Math.abs(a-3)>Math.abs(b-3)时,a放在b后面,Math.abs(a-3)<Math.abs(b-3)时,不交换位置,也就是说数组中的每一项减去3的绝对值越大越靠后。这里主要考的是对sort()方法的掌握。
发表于 2019-08-16 09:53:04 回复(2)
array. sort(sortfunction),这里按照数值减三的绝对值大小排序。所以选C
发表于 2017-02-09 12:35:07 回复(1)
raw:   -1 1  3 4 6 10
   -3:  -4 -2 0 1 3 7
abs:    4  2  0 1 3 7
==>    0  1  2  3  4 7
==>    3 4 1 6 -1 10
发表于 2020-02-08 11:28:25 回复(0)
首先知道背后原理:sort()方法背后是冒泡排序,对sort(sortFunction)中,sortFunction(a,b),a和b元素是数组中相邻元素,但是 但是(强调) 在数组中a和b的位置是b,a,即b元素在a元素的前面,sortFunction(a,b)在执行完之后,会返回数值,若返回值>0,即true,a,b位置不变,即b,a;若返回值<0,即false,交换a,b元素为置,即a,b;若返回值==0,a,b位置不变。
然后对这道题分析一波:在这道题中sortFunction是箭头函数,看重点 Math.abs(a-3)-Math.abs(b-3),即|a-3|  - |b-3| 的值,即升序排列;若|b-3| - |a-3|,则降序排列;
  • 原数组var array=[-1,1,3,4,6,10];
  • 减3后的绝对值[4,2,0,1,3,7]作为参数决定排序。
  •  根据绝对值减3大小排列[0,1,2,3,4,7],对应的原数组排序后为[3,4,1,6,-1,10]
发表于 2022-04-19 22:59:06 回复(2)
数值减三的绝对值越小,位置越靠前
发表于 2019-04-20 20:11:35 回复(0)
选C。
sort() 方法用于对数组的元素进行排序,参数决定排序的顺序。
  • 原数组var array=[-1,1,3,4,6,10];
  • 参数(a,b)=>Math.abs(a-3)-Math.abs(b-3):即数值减3的绝对值[4,2,0,1,3,7]作为参数决定排序。
  • 根据绝对值减3大小排列[0,1,2,3,4,7],对应的原数组排序后为[3,4,1,6,-1,10]
发表于 2022-03-01 13:18:29 回复(0)
答案选C。
这个排序本质上是根据元素距离3的远近排序,近的放在前面,远的放在后面。
发表于 2021-09-04 22:09:43 回复(1)
(a,b)=>Math.abs(a-3)-Math.abs(b-3);
箭头函数表示:当Math.abs(a-3)>Math.abs(b-3)时,a放在b后面,Math.abs(a-3)<Math.abs(b-3)时,不交换位置,也就是说数组中的每一项减去3的绝对值越大越靠后。这里主要考的是对sort()方法的掌握。

发表于 2020-03-23 14:24:53 回复(1)
答案:C
1. 排序从小到大。
2.然后算出绝对值[-1,1,3,4,6,10]  => [4 2 0 1 3 7]
发表于 2019-04-25 16:57:49 回复(0)
原数组               -1 1 3 4 6 10
 减3后的绝对值 4 2 0 1 3 7

按减3后的绝对值从小到大的排
3 4 1 6 -1 10


发表于 2020-04-01 18:39:38 回复(0)
a-b 就是升序,b-a 就是降序
发表于 2022-03-10 18:58:23 回复(0)

本题考察Array.Prototype.sort([fn(a,b)]) 的使用 

该方法对数组进行原地排序,故不会创建副本 

 fn实际上就是一个映射函数,根据fn的规则,其实我们可以得出这么一个结论: 
(1) 将原数组的各个元素的映射值都求出来,
(2)然后升序稳定排序这些映射值,
(3)反代原元素即可 

 以下是例子 
 -1,1,3,4,6,10 
映射
 4,2,0,1,3,7 
按映射值升序稳定排序 得最终结果 3,4,1,6,-1,10 

 这个过程其实也能帮助我们更好的理解fn的作用,并可以去更好的实际应用自定义规则的sort
编辑于 2021-04-16 16:32:03 回复(0)
c
发表于 2017-08-02 14:37:24 回复(0)
sort() 方法用于对数组的元素进行排序,参数决定排序的顺序。 原数组var array=[-1,1,3,4,6,10]; 参数(a,b)=>Math.abs(a-3)-Math.abs(b-3):即数值减3的绝对值[4,2,0,1,3,7]作为参数决定排序。 根据绝对值减3大小排列[0,1,2,3,4,7],对应的原数组排序后为[3,4,1,6,-1,10]
发表于 2022-02-18 10:25:29 回复(0)
先确定是升序,10应该在最后,排除前两项。然后是-1和1的顺序,-1-3得-4,取绝对值比1-3=-2绝对值2大,因此-1在1后面。
发表于 2021-07-14 13:27:32 回复(0)
(a,b)=>Math.abs(a-3)-Math.abs(b-3);
当Math.abs(a-3)>Math.abs(b-3)时,a、b交换位置;Math.abs(a-3)<Math.abs(b-3)时,不交换位置;
也就是说:数组中的每一项减去3的绝对值越大放到绝对值小的后面。

-1减3=-4,绝对值4;1减3的绝对值2;排序后1在-1前面;
同理,计算比较继续排其他数;
原:-1,1,3,4,6,10;
排序后:3,4,1,6,-1,10;
发表于 2021-07-05 14:19:03 回复(0)
a-b>0,则变换位置 a-b<=0,则位置不变
发表于 2019-06-20 13:10:57 回复(0)
这个Array.prototype.sort里面传入函数,对于函数(a,b)返回值是大于0,还是小于0决定参数的前后,两者总是记错,现在记录一下,返回值大于0,调换顺序,小于等于0顺序不动。
发表于 2019-10-25 18:01:10 回复(2)
C
发表于 2019-05-08 21:47:12 回复(0)