有人可以解释方法映射的这种特殊用途吗?

Tal*_*viu 6 javascript arrays methods

我将其视为 codewars 挑战的解决方案,您需要在不使用 reverse 方法的情况下反转数组,并且仅使用 30 位备用:

reverse=a=>[...a].map(a.pop,a)
Run Code Online (Sandbox Code Playgroud)

现在我知道使用地图的方式是这样的:

array.map(item => somethingelse)
Run Code Online (Sandbox Code Playgroud)

所以我真的不明白在这种情况下如何使用地图,有人可以解释一下吗?

Cer*_*nce 7

.map接受的第一个参数是在每次迭代中运行的回调。

array.map(item => somethingelse)
Run Code Online (Sandbox Code Playgroud)

相当于

const callback = item => somethingelse;
array.map(callback);
Run Code Online (Sandbox Code Playgroud)

第二个参数.map接受是this运行回调时使用的值。为了显示:

array.map(item => somethingelse)
Run Code Online (Sandbox Code Playgroud)

this在 a 中引用通常很奇怪.map,但这是可能的,并且通过传递第二个参数,您可以确定它所指的是什么。

Array.prototype.pop需要一个调用上下文 - 一个this值 - 来知道您试图从中弹出项目的数组,因此在原始代码中:

reverse=a=>[...a].map(a.pop,a)
Run Code Online (Sandbox Code Playgroud)

a必须作为第二个参数传递.map才能工作。

a.pop相当于Array.prototype.map这里,因为它作为回调传递:

// Equivalent code:
reverse=a=>[...a].map(Array.prototype.pop, a);
Run Code Online (Sandbox Code Playgroud)

[...a].map(部分被用作调用.pop() n时间的快捷方式,其中n是原始数组的长度。返回的每个项目都会导致新数组中的一个新项目 - 首先弹出原始数组中的最后一个项目并放入新数组中的第一个位置,依此类推。