6
社区成员
发帖
与我相关
我的任务
分享不知何故,人们认为for循环更容易掌握和理解……我来这里是为了改变这一点。
我将使用 Javascript,但大多数语言都以一种或另一种方式实现这些方法,有时在命名上会有一些差异。
大多数方法(除了例外)都具有相同的签名。
让我们与for循环进行比较:
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">array</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">a</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">b</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">c</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">];</span>
<span style="color:var(--syntax-comment-color)">// the classic `for` loop you can have better</span>
<span style="color:var(--syntax-comment-color)">// control over the indexed you're using</span>
<span style="color:var(--syntax-declaration-color)">for</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">let</span> <span style="color:var(--syntax-name-color)">index</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-name-color)">index</span> <span style="color:var(--syntax-error-color)"><</span> <span style="color:var(--syntax-name-color)">array</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">length</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-name-color)">index</span><span style="color:var(--syntax-error-color)">++</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">array</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-name-color)">index</span><span style="color:var(--syntax-text-color)">];</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// a, b, c</span>
<span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-comment-color)">// the `for in` gives the index</span>
<span style="color:var(--syntax-declaration-color)">for</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">index</span> <span style="color:var(--syntax-declaration-color)">in</span> <span style="color:var(--syntax-name-color)">array</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">array</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-name-color)">index</span><span style="color:var(--syntax-text-color)">];</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// a, b, c</span>
<span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-comment-color)">// the `for of` gives the element</span>
<span style="color:var(--syntax-declaration-color)">for</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-declaration-color)">of</span> <span style="color:var(--syntax-name-color)">array</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// a, b, c</span>
<span style="color:var(--syntax-text-color)">}</span>
</code></span></span>
如果你不需要返回任何东西,使用map返回会让我认为你忘记返回一些东西。
同样,有许多迂回的方法可以使语言的当前状态有更好的方法,例如使用findIndex !== -1when a somewill 做同样的事情。
只要你返回的是另一个数组,那么你就可以做一些事情并将其传递到下一步。
有时这是有道理的,但有时,您可能希望将它们分配给描述性变量。
对于数组中的“每个”元素,它都会执行某些操作但不会返回任何内容。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">a</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">b</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">c</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">((</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-comment-color)">// console.log doesn't return anything</span>
<span style="color:var(--syntax-comment-color)">// so it's perfect for the forEach</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// a, b, c</span>
<span style="color:var(--syntax-text-color)">})</span>
</code></span></span>
当你只需要做某事而不返回任何东西时,你可以使用它:日志,toasts......
它很容易理解和使用,但由于它不返回任何内容,所以没有太多用途。(无论你想什么,都有更好的方法)
数组方法的典范!
对于数组中的每个元素,它返回一个值。
(注:即使你不返回,它也会返回undefined)
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-comment-color)">// not adding {} in the arrow function, means it returns implicitly</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">map</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">*</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// result array is [2, 4, 6]</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">map</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">if</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">!==</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-comment-color)">// remainder of the division by 2 not equal to zero </span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">*</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-comment-color)">// no "else" returns</span>
<span style="color:var(--syntax-text-color)">})</span> <span style="color:var(--syntax-comment-color)">// resulting array [2, undefined, 6]</span>
</code></span></span>
由于它返回相同大小的数组,因此它可以用于多种用途并使链接变得容易。
人们学习这些方法的祸根……但其实并没有那么复杂。
对于数组中的每个元素,它返回“一个”东西(可以是任何东西)。
您可以选择设置一个起始值。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-comment-color)">// classical use case</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">reduce</span><span style="color:var(--syntax-text-color)">((</span><span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">accumulator</span> <span style="color:var(--syntax-error-color)">+</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// returns 6</span>
<span style="color:var(--syntax-comment-color)">// classical mistake nr 1: not returning anything</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">reduce</span><span style="color:var(--syntax-text-color)">((</span><span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// 0 (initial value), undefined, undefined (undefined because you didn't return)</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// 1, 2, 3</span>
<span style="color:var(--syntax-name-color)">accumulator</span> <span style="color:var(--syntax-error-color)">+</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-comment-color)">// this would be 1 (0 + 1), then NaN, NaN (number + undefined/NaN)</span>
<span style="color:var(--syntax-comment-color)">// always remember to return something, even if only the accumulator</span>
<span style="color:var(--syntax-text-color)">},</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-comment-color)">// (possible) mistake: not having an initial value</span>
<span style="color:var(--syntax-comment-color)">// no initial value means the first element is the initial value</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">reduce</span><span style="color:var(--syntax-text-color)">((</span><span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">)</span><span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">accumulator</span> <span style="color:var(--syntax-error-color)">+</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// retuns 6</span>
<span style="color:var(--syntax-text-color)">[].</span><span style="color:var(--syntax-name-color)">reduce</span><span style="color:var(--syntax-text-color)">((</span><span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">)</span><span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">accumulator</span> <span style="color:var(--syntax-error-color)">+</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// throws because empty array with no initial value</span>
<span style="color:var(--syntax-comment-color)">// things start to be different for more complex use cases</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">reduce</span><span style="color:var(--syntax-text-color)">((</span><span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">)</span><span style="color:var(--syntax-error-color)">=></span><span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">===</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">even</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">push</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">}</span> <span style="color:var(--syntax-declaration-color)">else</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">odd</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">push</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-comment-color)">// below I'm using JSDoc to type the initial value</span>
<span style="color:var(--syntax-comment-color)">// because using JS doesn't mean not using types ;]</span>
<span style="color:var(--syntax-text-color)">},</span> <span style="color:var(--syntax-comment-color)">/** @type {{ even: number[], odd: number[] }} */</span> <span style="color:var(--syntax-text-color)">({</span> <span style="color:var(--syntax-name-color)">even</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">[],</span> <span style="color:var(--syntax-name-color)">odd</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">[]}));</span>
<span style="color:var(--syntax-comment-color)">// this returns: { even: [ 2 ], odd: [ 1, 3 ] }</span>
<span style="color:var(--syntax-comment-color)">// Not using an initial value will break this in multiple ways.</span>
<span style="color:var(--syntax-comment-color)">// this is another way to write the same thing</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">reduce</span><span style="color:var(--syntax-text-color)">((</span><span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">)</span><span style="color:var(--syntax-error-color)">=></span><span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">===</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-text-color)">...</span><span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">,</span>
<span style="color:var(--syntax-name-color)">even</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">even</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">concat</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">),</span>
<span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-text-color)">...</span><span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">,</span>
<span style="color:var(--syntax-name-color)">odd</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">odd</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">concat</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">),</span>
<span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-text-color)">},</span> <span style="color:var(--syntax-comment-color)">/** @type {{ even: number[], odd: number[] }} */</span><span style="color:var(--syntax-text-color)">({</span> <span style="color:var(--syntax-name-color)">even</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">[],</span> <span style="color:var(--syntax-name-color)">odd</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">[]}));</span>
<span style="color:var(--syntax-comment-color)">// the important thing to remember is to always return something</span>
<span style="color:var(--syntax-comment-color)">// the "one" thing it returns can be anything:</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">reduce</span><span style="color:var(--syntax-text-color)">((</span><span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">===</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">]</span> <span style="color:var(--syntax-error-color)">+=</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-text-color)">}</span> <span style="color:var(--syntax-declaration-color)">else</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">]</span> <span style="color:var(--syntax-error-color)">+=</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-name-color)">accumulator</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-text-color)">},</span> <span style="color:var(--syntax-comment-color)">/** @type {[number, number]} [*/</span><span style="color:var(--syntax-text-color)">([</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">]));</span>
<span style="color:var(--syntax-comment-color)">// this returns [4, 2]</span>
<span style="color:var(--syntax-comment-color)">// and would again have multiple problems without an initial value</span>
</code></span></span>
如果您要在外部实例化一个或多个变量,然后使用for循环甚至 aforEach并对其进行变异,那么它就是reduce.
它总是返回“一个”东西,正如你所看到的,它可以是任何东西:数字、字符串、数组、对象......
虽然,您基本上可以使用 做任何事情reduce,但请检查是否没有其他方法可以更好地涵盖这种情况。
还有一个reduceRight是相同的东西,但从最后一个元素开始。
对于数组中的每个元素,返回一个可以更小的数组。
虽然reduce返回“一个”事物,但filter始终返回一个可以从空到与输入相同大小的数组。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">filter</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">!==</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// returns [1, 3]</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">filter</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">5</span> <span style="color:var(--syntax-error-color)">===</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// return [0]</span>
<span style="color:var(--syntax-comment-color)">// one common use case: remove falsy values</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">map</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">!==</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-text-color)">})</span> <span style="color:var(--syntax-comment-color)">// at this point you would have: [1, undefined, 3]</span>
<span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">filter</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">Boolean</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// after this return [1, 3]</span>
</code></span></span>
如果您想从数组中删除值,filter这就是您想要的方法。
对于那些不知道的人来说:filter(Boolean)这是一种消除错误值的优雅方法。
''您应该小心,它会删除诸如(空字符串)和0(零)之类的虚假值。
展平数组并不是您每天都会使用的东西,但在许多情况下肯定很有用。基本上,toflat是从数组中删除维度。
如果您有一个 2x2 矩阵:[[1, 1], [1, 1]]并将其展平,您最终会得到一个简单的 4 项数组:[1, 1, 1, 1]。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">map</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-text-color)">[[[</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">]]];</span> <span style="color:var(--syntax-comment-color)">// sometimes you return values/tuples</span>
<span style="color:var(--syntax-comment-color)">// depending on what you really wanted to return, you just need to flat it</span>
<span style="color:var(--syntax-text-color)">})</span> <span style="color:var(--syntax-comment-color)">// here would return [[[[1]]],[[[2]]],[[[3]]]]</span>
<span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">flat</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-comment-color)">// returns [[[1]],[[2]],[[3]]]</span>
<span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">flat</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// returns [1, 2, 3]</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">map</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-text-color)">[[[</span><span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">]]];</span>
<span style="color:var(--syntax-text-color)">})</span> <span style="color:var(--syntax-comment-color)">// here would return [[[[1]]],[[[2]]],[[[3]]]]</span>
<span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">flat</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">Infinity</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// returns [1, 2, 3]</span>
<span style="color:var(--syntax-comment-color)">// flatting to infinity means it will remove all dimensions</span>
</code></span></span>
flat您从数组中调用,它需要一个数字,即您要从中剥离的维度。如果您想要一个简单的数组作为结果,无论数组有多少维,那么请使用 ,flat(Infinity)因为它就能做到这一点。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">flatMap</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">*</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">];</span> <span style="color:var(--syntax-comment-color)">// returns [2], [4], [6]</span>
<span style="color:var(--syntax-text-color)">});</span> <span style="color:var(--syntax-comment-color)">// returns [2, 4, 6] because it flattened</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">flatMap</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">===</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">*</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-comment-color)">// return 4</span>
<span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-comment-color)">// without returning anything, it would result in [undefined, 4, undefined]</span>
<span style="color:var(--syntax-comment-color)">// while flatMap doesn't remove falsy values</span>
<span style="color:var(--syntax-comment-color)">// a flattened empty array disappear</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-text-color)">[];</span>
<span style="color:var(--syntax-text-color)">});</span> <span style="color:var(--syntax-comment-color)">// returns [4]</span>
</code></span></span>
flatMap基本上是 amap后面跟着flat(1).
TIL:您可以使用flatMap并返回[]虚假值。它将仅返回值
这些都是有趣的,了解后您会发现用例无处不在!
通常,用例是:filter(/* for something */).length /* (not) equal to something */或Boolean(find(/* something (not) equal */))。
对于数组中的每个元素,some如果至少一个元素通过谓词,则返回 true,every如果所有元素都通过谓词。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">some</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">===</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// true</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">every</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">===</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// false</span>
</code></span></span>
一件很酷的事情是,它们都some在第一个truthy返回值和every第一个falsy返回值时提前返回。
当您需要的只是一个布尔值是否存在时,请使用someor every。
find将返回通过谓词的第一个元素undefined,否则findIndex将返回元素的索引,-1否则返回。
两者都从索引开始搜索0,但如果您想要最后一个,则使用“最后”变体。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-comment-color)">// returns the element:</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">find</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">!==</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// 1</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">findLast</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">!==</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// 3</span>
<span style="color:var(--syntax-comment-color)">// return the index:</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">findIndex</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">!==</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// 0</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">findLastIndex</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-name-color)">element</span> <span style="color:var(--syntax-error-color)">%</span> <span style="color:var(--syntax-literal-color)">2</span> <span style="color:var(--syntax-error-color)">!==</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// 2</span>
</code></span></span>
有时您只想检查数组中是否存在某个值,这会检查深度相等性。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">includes</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// true</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">includes</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">1</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// false</span>
</code></span></span>
很可能,我们可以在此处包含indexOf并lastIndexOf检查值,但返回索引或-1以其他方式返回。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">indexOf</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// 0</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">indexOf</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">1</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// -1</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">lastIndexOf</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// 2</span>
<span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">].</span><span style="color:var(--syntax-name-color)">lastIndexOf</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">1</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span> <span style="color:var(--syntax-comment-color)">// -1</span>
</code></span></span>
的用例includes通常是搜索原始值数组(字符串、数字、符号……),同时some和every用于比值是否存在或对象更复杂的事情。
MDN 文档非常好。您可能不知道所有这些的存在,但是一旦您知道它们就非常简单了。
不过,有些人可能知道这些方法的存在,但不知道如何应用它们。因此,如果您愿意,请发送您不知道如何应用这些方法的示例,我可以重构选项。