无意中看到一道题:找到每个子数组中的最大值生成一个新的数组
let arr = [
[55, 10, 91],
[32, 43, 50],
[22, 11, 82],
]
let res = foo(arr) // res === [91, 50, 82]
这道题很简单有多种的写法,下面这种比较奇葩
function foo(arr) {
return arr.map(Function.prototype.apply.bind(Math.max, null))
}
思考一下:1、这里的 null 的作用 2、可不可以用 call
1
xxx749 2019-06-15 01:55:28 +08:00 via Android
1、apply 函数的首参数,指定函数运行时使用的 this 值。
2、不可以 |
2
azh7138m 2019-06-15 02:10:03 +08:00
function foo(arr) {
return arr.map(i => Math.max.call(null, ...i)) } 用 apply 第一个参数是 this 第二个是实际传给被调函数的参数,null 是把 this 那个位置占掉,这样 map 回调函数的时候,传进来的参数会被传递给 max,call 得用解构的语法。 |
3
Sparetire 2019-06-15 03:12:32 +08:00 via Android
null 是给 apply 的,前面 Function.prototype 没啥意义,要希望字符少你还可以把它替换成 Map.apply.bind。。
不过现在有...了这样写也不能省字符,除非你有某些强迫症 |
4
dartabe 2019-06-15 06:18:04 +08:00
求问下为什么不直接写个函数呢? 就多几个字符但是可读性好很多啊
|
5
autoxbc 2019-06-15 06:51:26 +08:00 via iPhone
说实话这些都是 js 旧时代的糟粕,新提案双冒号符才是回归本质
|
6
dartabe 2019-06-15 07:06:48 +08:00
懂了 现在都用...了
|
7
aleen42 2019-06-15 09:13:17 +08:00 via Android
誰會寫出這種 readable 這麼低的代碼
|
9
FrankFang128 2019-06-15 12:26:12 +08:00
蹩脚的 JS,用 ... 就好了
|
10
SoloCompany 2019-06-15 15:51:19 +08:00
const foo = arr => _.map(arr, 2)
|
11
palmers 2019-06-15 16:56:16 +08:00
return arr.map(item => Math.max(...item)); 我觉得更好一点
|