揭秘数组方法-Javascript

Q神日志 2023-07-16 18:00:40

不知何故,人们认为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>

 

很可能,我们可以在此处包含indexOflastIndexOf检查值,但返回索引或-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通常是搜索原始值数组(字符串、数字、符号……),同时someevery用于比值是否存在或对象更复杂的事情。

最后备注

MDN 文档非常好。您可能不知道所有这些的存在,但是一旦您知道它们就非常简单了。

不过,有些人可能知道这些方法的存在,但不知道如何应用它们。因此,如果您愿意,请发送您不知道如何应用这些方法的示例,我可以重构选项。

...全文
177 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

6

社区成员

发帖
与我相关
我的任务
社区描述
分享
java-rocketmqpygame前端 个人社区 广东省·广州市
社区管理员
  • Q shen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧