<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">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><br><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><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><br><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><br><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><br><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><br><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">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>