木易杨前端面试题第 43 题:使用 sort() 数组排序

使用 sort() 对数组 [3, 15, 8, 29, 102, 22] 进行排序,输出结果

[ 102, 15, 22, 29, 3, 8 ]

我觉得对于一个js的方法,这里指数组方法,一般要记住以下几个方面

  • 参数,有几个,几个必选,几个可选,用途是什么
  • 返回值
  • 是否修改原有数组

语法

arrayObject.sort(sortby)

参数

sortby 可选。规定排序顺序。必须是函数。

返回值 是否修改原有数组

没有返回,直接修改原数组

无参数怎么排序

先把对象转成字符,再按照字符编码的顺序进行排序

使用场景

由小到大排序
[3, 15, 8, 29, 102, 22].sort((a,b) => {return a - b});


第 48 题:call 和 apply 的区别是什么,哪个性能更好一些

1,call()、apply()、bind() 都是用来重定义 this 这个对象的!

木易杨前端面试题第 43 题:使用 sort() 数组排序_第1张图片
012704.png
obj.myFun.call(db);    // 德玛年龄 99
obj.myFun.apply(db);    // 德玛年龄 99
obj.myFun.bind(db)();   // 德玛年龄 99

以上出了 bind 方法后面多了个 () 外 ,结果返回都一致!
由此得出结论,bind 返回的是一个新的函数,你必须调用它才会被执行。

2,对比call 、bind 、 apply 传参情况下

木易杨前端面试题第 43 题:使用 sort() 数组排序_第2张图片
012705.png
obj.myFun.call(db,'成都','上海');     // 德玛 年龄 99  来自 成都去往上海
obj.myFun.apply(db,['成都','上海']);      // 德玛 年龄 99  来自 成都去往上海  
obj.myFun.bind(db,'成都','上海')();       // 德玛 年龄 99  来自 成都去往上海
obj.myFun.bind(db,['成都','上海'])();   // 德玛 年龄 99  来自 成都, 上海去往 undefined

所以呢,区别就在于 参数 call是有一个写一个 而 apply是需要将参数打包成一个数组

值得一提的是 call其实参数也可以是数组

let params = [1,2,3,4]
xx.call(obj, ...params)

在有了es6之后 数组打开可以更加地方便

你可能感兴趣的:(木易杨前端面试题第 43 题:使用 sort() 数组排序)