ds-algo-study
Version:
Just experimenting with publishing a package
31 lines (30 loc) • 2.6 kB
HTML
<p>Flattens an array up to the specified depth.</p>
<ul>
<li>Use recursion, decrementing <code>depth</code> by 1 for each level of depth.</li>
<li>Use <code>Array..reduce()</code> and <code>Array..concat()</code> to merge elements or arrays.</li>
<li>Base case, for <code>depth</code> equal to <code>1</code> stops recursion.</li>
<li>Omit the second argument, <code>depth</code> to flatten only to a depth of <code>1</code> (single flatten).</li>
</ul>
<div id=">pre data-role=" codeBlock" data-info="js" class="language-javascript">
<code><a title="1"><span >function</span> <span >flatten</span>(arr<span >,</span> depth <span >=</span> <span >1</span>) <span >{</span></a>
<a title="2"> <span >return</span> <span >arr</span>.<span >reduce</span>((newArr<span >,</span> curEle) <span >=></span> <span >{</span></a>
<a title="3"> <span >if</span> (depth <span >></span> <span >1</span> <span >&&</span> <span >Array</span>.<span >isArray</span>(curEle)) <span >{</span></a>
<a title="4"> <span >return</span> <span >newArr</span>.<span >concat</span>(<span >flatten</span>(curEle<span >,</span> depth <span >-</span> <span >1</span>))<span >;</span></a>
<a title="5"> <span >}</span> <span >else</span> <span >{</span></a>
<a id=-6" title="6"> <span >return</span> <span >newArr</span>.<span >concat</span>(curEle)<span >;</span></a>
<a title="7"> <span >}</span></a>
<a title="8"> <span >},</span> [])<span >;</span></a>
<a title="9"><span >}</span></a>
<a id=-10" title="10"><span>console</span>.<span>log</span>(<span>"flatten([1, [2], 3, 4], 3): ",</span>
<span>flatten</span>([<span>1,</span> [<span>2</span>]<span>,</span> <span>3,</span> <span>4</span>]<span>,</span>
<span>3</span>))<span>;</span></a></code>
</pre>
</div>
<div id=">pre data-role=" codeBlock" data-info="js" class="language-javascript">
<code><a title="1"><span >flatten</span>([<span >1,</span> <span >"a",</span> [<span >"hello",</span> [<span >"world",</span> <span >"1"</span>]]])</a>
<a id=-2" title="2"><span >flatten</span>([<span >1,</span> [<span >2</span>]<span >,</span> <span >3,</span> <span >4</span>])<span >;</span> <span >// [1, 2, 3, 4]</span></a>
<a id=-3" title="3"><span>flatten</span>([<span>1,</span> [<span>2,</span> [<span>3,</span> [<span>4,</span>
<span>5</span>]<span>,</span> <span>6</span>]<span>,</span> <span>7</span>]<span>,</span>
<span>8</span>]<span>,</span> <span>2</span>)<span>;</span> <span>// [1, 2, 3, [4, 5], 6, 7, 8]</span></a></code>
</pre>
</div>