<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div class="moz-cite-prefix">If you're looking for data points: I
      have never wanted exactly this, and would find it a pretty bizarre
      thing to find in the standard library. The most similar thing I've
      wanted would be to toggle something's presence in a Set. Far more
      often than that, I've wanted something like upsert or setdefault.
      Far more often than *that*, I've wanted Map.prototype.get with a
      default value, though probably ?? covers that scenario well enough
      now.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">One reason why toggle's inclusion would
      seem weird to me is that it's not clear to me whether it should
      remove all copies, or just the first (so you'd need to toggle N
      times to clear out an array with N copies). Nor is it obvious why
      an added-by-toggle element should be pushed onto the end as
      opposed to somewhere else in the list (eg if I had a sorted array,
      I'd probably expect it to be in the middle.)  The main reason,
      though, is that it feels rather niche.<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">On 2/8/20 4:45 AM, manuelbarzi wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CALLRck=idMNz0H-rUaVqi2nvFRCJ+VFfx4GJ2Jjk357VpzA5Kw@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div class="gmail_default"
          style="font-family:arial,helvetica,sans-serif;color:#000000">no
          intention in this proposal to discuss the `how`, but just the
          `what`, as i assume everybody here knows how to implement it
          in a polyfill, single function or any other approach. the
          proposal just goes on the idea that "hey, we have already
          semantic things like `some`, `every`, etc... in array,
          wouldn't it be useful to have the `toggle` too? which in my
          case i found using and reusing in various projects already.
          how about you, guys?" then if there is enough quorum, just
          thinking about integrating it or not. that's all. thank you.</div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Fri, Feb 7, 2020 at 10:36
          PM Scott Rudiger <<a href="mailto:scottrudiger@gmail.com"
            moz-do-not-send="true">scottrudiger@gmail.com</a>> wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px
          0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div dir="ltr">
            <div dir="ltr">I believe this wouldn't result in the OP's
              desired results since the filtered array is no longer the
              same length as the original array:
              <div><br>
              </div>
              <div>```js</div>
              <div>
                <div style="color:rgb(170,177,192);background-color:rgb(22,24,33);font-family:Menlo,Monaco,"Courier New",monospace;font-size:13.99px;line-height:21px;white-space:pre-wrap"><div><span style="color:rgb(198,120,221)">var</span> <span style="color:rgb(97,175,239)">toggle</span> <span style="color:rgb(86,182,194)">=</span> (<span style="color:rgb(171,178,191)">arr</span>, <span style="color:rgb(171,178,191)">el</span>) <span style="color:rgb(198,120,221)">=></span> <span style="color:rgb(229,192,123)">Object</span><span style="color:rgb(171,178,191)">.</span><span style="color:rgb(97,175,239)">assign</span><span style="color:rgb(171,178,191)">(arr</span>, <span style="color:rgb(224,108,117)">arr</span><span style="color:rgb(171,178,191)">.</span><span style="color:rgb(97,175,239)">filter</span><span style="color:rgb(171,178,191)">(n</span> <span style="color:rgb(198,120,221)">=></span> <span style="color:rgb(171,178,191)">n</span> <span style="color:rgb(86,182,194)">!==</span> <span style="color:rgb(171,178,191)">el))</span>;</div>
<div><span style="color:rgb(97,175,239)">toggle</span><span style="color:rgb(171,178,191)">([</span><span style="color:rgb(209,154,102)">1</span>, <span style="color:rgb(209,154,102)">2</span>, <span style="color:rgb(209,154,102)">3</span>, <span style="color:rgb(209,154,102)">2</span>, <span style="color:rgb(209,154,102)">1</span><span style="color:rgb(171,178,191)">]</span>, <span style="color:rgb(209,154,102)">1</span><span style="color:rgb(171,178,191)">)</span>; <span style="color:rgb(92,99,112);font-style:italic">// [2, 3 ,2, 2, 1]</span></div></div>
              </div>
            </div>
            <div>```</div>
            <div><br>
            </div>
            <div>Here's a helper function that would work (and also push
              the element if it's not included in the original array):</div>
            <div><br>
            </div>
            <div>```js</div>
            <div>
              <div>
                <div style="color:rgb(170,177,192);background-color:rgb(22,24,33);font-family:Menlo,Monaco,"Courier New",monospace;font-size:13.99px;line-height:21px;white-space:pre-wrap"><div><span style="color:rgb(198,120,221)">var</span> <span style="color:rgb(97,175,239)">toggle</span> <span style="color:rgb(86,182,194)">=</span> (<span style="color:rgb(171,178,191)">arr</span>, <span style="color:rgb(171,178,191)">el</span>) <span style="color:rgb(198,120,221)">=></span> <span style="color:rgb(171,178,191)">{</span></div><div>  <span style="color:rgb(198,120,221)">var</span> <span style="color:rgb(171,178,191)">len</span> <span style="color:rgb(86,182,194)">=</span> <span style="color:rgb(224,108,117)">arr</span><span style="color:rgb(171,178,191)">.</span><span style="color:rgb(209,154,102)">length</span>;</div>
<div>  <span style="color:rgb(198,120,221)">for</span> <span style="color:rgb(171,178,191)">(</span><span style="color:rgb(198,120,221)">var</span> <span style="color:rgb(171,178,191)">i</span> <span style="color:rgb(86,182,194)">=</span> <span style="color:rgb(209,154,102)">0</span>; <span style="color:rgb(171,178,191)">i</span> <span style="color:rgb(86,182,194)"><</span> <span style="color:rgb(224,108,117)">arr</span><span style="color:rgb(171,178,191)">.</span><span style="color:rgb(209,154,102)">length</span>; <span style="color:rgb(171,178,191)">i</span><span style="color:rgb(86,182,194)">++</span><span style="color:rgb(171,178,191)">)</span></div><div>    <span style="color:rgb(198,120,221)">if</span> <span style="color:rgb(171,178,191)">(</span><span style="color:rgb(224,108,117)">arr</span><span style="color:rgb(171,178,191)">[i]</span> <span style="color:rgb(86,182,194)">===</span> <span style="color:rgb(171,178,191)">el)</span></div><div>      <span style="color:rgb(224,108,117)">arr</span><span style="color:rgb(171,178,191)">.</span><span style="color:rgb(97,175,239)">splice</span><span style="color:rgb(171,178,191)">(i</span><span style="color:rgb(86,182,194)">--</span>, <span style="color:rgb(209,154,102)">1</span><span style="color:rgb(171,178,191)">)</span>;</div>
<div>  <span style="color:rgb(198,120,221)">if</span> <span style="color:rgb(171,178,191)">(</span><span style="color:rgb(224,108,117)">arr</span><span style="color:rgb(171,178,191)">.</span><span style="color:rgb(209,154,102)">length</span> <span style="color:rgb(86,182,194)">===</span> <span style="color:rgb(171,178,191)">len)</span></div><div>    <span style="color:rgb(224,108,117)">arr</span><span style="color:rgb(171,178,191)">.</span><span style="color:rgb(97,175,239)">push</span><span style="color:rgb(171,178,191)">(el)</span>;</div>
<div>  <span style="color:rgb(198,120,221)">return</span> <span style="color:rgb(171,178,191)">arr</span>;</div><div><span style="color:rgb(171,178,191)">}</span>;</div>
<div><span style="color:rgb(198,120,221)">var</span> <span style="color:rgb(171,178,191)">a</span> <span style="color:rgb(86,182,194)">=</span> <span style="color:rgb(97,175,239)">toggle</span><span style="color:rgb(171,178,191)">([</span><span style="color:rgb(209,154,102)">1</span>, <span style="color:rgb(209,154,102)">2</span>, <span style="color:rgb(209,154,102)">3</span>, <span style="color:rgb(209,154,102)">2</span>, <span style="color:rgb(209,154,102)">1</span><span style="color:rgb(171,178,191)">]</span>, <span style="color:rgb(209,154,102)">1</span><span style="color:rgb(171,178,191)">)</span>; <span style="color:rgb(92,99,112);font-style:italic">// mutates the original array removing 1 => [2, 3, 2]</span></div><div><span style="color:rgb(97,175,239)">toggle</span><span style="color:rgb(171,178,191)">(a</span>, <span style="color:rgb(209,154,102)">1</span><span style="color:rgb(171,178,191)">)</span>; <span style="color:rgb(92,99,112);font-style:italic">// mutates the original array adding 1 => [2, 3, 2, 1]</span></div></div>
              </div>
            </div>
            <div>```</div>
            <div><br>
            </div>
            <br>
            <div class="gmail_quote">
              <div dir="ltr" class="gmail_attr">On Fri, Feb 7, 2020 at
                11:26 AM Herby Vojčík <<a
                  href="mailto:herby@mailbox.sk" target="_blank"
                  moz-do-not-send="true">herby@mailbox.sk</a>> wrote:<br>
              </div>
              <blockquote class="gmail_quote" style="margin:0px 0px 0px
                0.8ex;border-left:1px solid
                rgb(204,204,204);padding-left:1ex">On 7. 2. 2020 13:11,
                Scott Rudiger wrote:<br>
                > `Array.prototype.filter` seems more versatile
                (although it doesn't <br>
                > mutate the original array) since it removes
                elements based on a function:<br>
                > <br>
                > ```js<br>
                > [1, 2, 3, 2, 1].filter(n => n !== 1); // [2, 3,
                2]<br>
                > ```<br>
                <br>
                But what if one wants to mutate in-place. Would this
                work?<br>
                <br>
                   Object.assign(arr, arr.filter(n => n !== 1))<br>
                <br>
                If not, maybe there can be<br>
                <br>
                   aCollection.replaceWith(anIterable)<br>
                <br>
                Herby<br>
              </blockquote>
            </div>
          </div>
        </blockquote>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
es-discuss mailing list
<a class="moz-txt-link-abbreviated" href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a>
<a class="moz-txt-link-freetext" href="https://mail.mozilla.org/listinfo/es-discuss">https://mail.mozilla.org/listinfo/es-discuss</a>
</pre>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>