<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Полное руководство по Array.from() в JavaScript]]></title><description><![CDATA[<h1>Полное руководство по Array.from() в JavaScript</h1>
<p dir="auto"><code>Array.from()</code> является одним из самых универсальных и мощных методов для работы с массивами в JavaScript, добавленный в стандарт ECMAScript 2015 (ES6). Этот статический метод создаёт новый экземпляр массива из итерируемых или массивоподобных объектов, предоставляя элегантное решение для множества задач обработки данных.</p>
<h2>Синтаксис и параметры</h2>
<p dir="auto"><strong>Базовый синтаксис:</strong></p>
<pre><code class="language-javascript">Array.from(arrayLike, mapFunction, thisArg)
</code></pre>
<p dir="auto">Метод принимает три параметра: обязательный <code>arrayLike</code> объект для преобразования, опциональную функцию <code>mapFunction</code> для обработки элементов и опциональный <code>thisArg</code> для контекста выполнения.<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from" target="_blank" rel="noopener noreferrer">^1</a></p>
<h2>Основные возможности и применения</h2>
<h3>Преобразование строк в массивы</h3>
<p dir="auto"><code>Array.from()</code> отлично работает со строками, включая полную поддержку Unicode символов:</p>
<pre><code class="language-javascript">Array.from("Hello");     // ['H', 'e', 'l', 'l', 'o']
Array.from("I💖U");      // ['I', '💖', 'U'] - корректно обрабатывает эмодзи
</code></pre>
<h3>Работа с Set и Map</h3>
<p dir="auto">Один из популярнейших случаев использования — удаление дубликатов из массива через преобразование Set:</p>
<pre><code class="language-javascript">const uniqueItems = Array.from(new Set([1, 1, 2, 2, 3])); // [1, 2, 3]
</code></pre>
<p dir="auto">Для Map объектов метод позволяет извлекать ключи, значения или пары ключ-значение:<a href="https://dev.to/tasnimreza/7-practical-use-cases-of-javascript-array-from-4083" target="_blank" rel="noopener noreferrer">^2</a></p>
<pre><code class="language-javascript">const myMap = new Map(&lsqb;&lsqb;'a', 1], ['b', 2&rsqb;&rsqb;);
Array.from(myMap);         // &lsqb;&lsqb;'a', 1], ['b', 2&rsqb;&rsqb;
Array.from(myMap.keys());  // ['a', 'b']
Array.from(myMap.values()); // [1, 2]
</code></pre>
<h3>DOM-коллекции и NodeList</h3>
<p dir="auto"><code>Array.from()</code> незаменим при работе с DOM, превращая NodeList в полноценные массивы с доступом ко всем методам массивов:</p>
<pre><code class="language-javascript">const divs = document.querySelectorAll('div');
const divArray = Array.from(divs);

// Извлечение атрибутов с помощью mapper функции
const imageSources = Array.from(
    document.querySelectorAll('img'),
    img =&gt; img.src
);
</code></pre>
<h3>Генерация последовательностей и диапазонов</h3>
<p dir="auto">Особенно мощная возможность — создание массивов с заданными параметрами:<a href="https://www.freecodecamp.org/news/javascript-range-create-an-array-of-numbers-with-the-from-method/" target="_blank" rel="noopener noreferrer">^3</a></p>
<pre><code class="language-javascript">// Массив индексов
Array.from({length: 5}, (_, index) =&gt; index); // [0, 1, 2, 3, 4]

// Диапазон чисел
const range = (start, stop, step = 1) =&gt;
    Array.from(
        { length: (stop - start) / step + 1 },
        (_, index) =&gt; start + index * step
    );

range(1, 5);    // [1, 2, 3, 4, 5]
range(2, 8, 2); // [2, 4, 6, 8]
</code></pre>
<h3>Работа с TypedArray</h3>
<p dir="auto"><code>Array.from()</code> эффективно преобразует типизированные массивы в обычные:</p>
<pre><code class="language-javascript">const float32 = new Float32Array([1.1, 2.2, 3.3]);
const regularArray = Array.from(float32); // [1.1, 2.2, 3.3]
</code></pre>
<h2>Анализ производительности</h2>
<h3>Сравнение с альтернативными методами</h3>
<p dir="auto">Исследования показывают различную производительность в зависимости от размера данных и типа операции:<a href="https://stackoverflow.com/questions/40548213/array-from-vs-spread-syntax" target="_blank" rel="noopener noreferrer">^4</a></p>
<p dir="auto"><strong>Для малых массивов (&lt; 1000 элементов):</strong></p>
<ul>
<li>Spread оператор быстрее на 15-20%</li>
<li><code>Array.from()</code> показывает сопоставимые результаты</li>
</ul>
<p dir="auto"><strong>Для больших массивов (&gt; 10000 элементов):</strong></p>
<ul>
<li>Разница в производительности минимальна</li>
<li>Цикл <code>for</code> остается самым быстрым для генерации последовательностей</li>
</ul>
<p dir="auto"><strong>Использование памяти:</strong></p>
<ul>
<li><code>Array.from()</code>: базовая линия (1.0x)</li>
<li>Spread оператор: 1.15x памяти</li>
<li>Ручной цикл for: 0.85x памяти</li>
</ul>
<h3>Когда использовать Array.from()</h3>
<p dir="auto"><code>Array.from()</code> предпочтителен когда:<a href="https://dev.to/gingerchew/which-should-you-use-arrayfrom-vs-spread-operator-4d6a" target="_blank" rel="noopener noreferrer">^5</a></p>
<ul>
<li>Работаете с массивоподобными объектами без Symbol.iterator</li>
<li>Нужна встроенная функция mapping</li>
<li>Приоритет — читаемость и функциональный стиль кода</li>
<li>Требуется совместимость с различными типами входных данных</li>
</ul>
<h2>Поддержка браузерами и совместимость</h2>
<p dir="auto">Метод поддерживается всеми современными браузерами начиная с 2016-2017 года:<a href="https://www.w3schools.com/jsref/jsref_from.asp" target="_blank" rel="noopener noreferrer">^7</a></p>
<ul>
<li>Chrome 51+ (май 2016)</li>
<li>Firefox 54+ (июнь 2017)</li>
<li>Safari 10+ (сентябрь 2016)</li>
<li>Edge 15+ (апрель 2017)</li>
<li>Internet Explorer: НЕ поддерживается</li>
</ul>
<p dir="auto">Для старых браузеров доступны полифиллы, которые обеспечивают полную функциональность метода.<a href="https://dev.to/santanu_biswas/polyfills-of-array-methods-in-javascript-4d0k" target="_blank" rel="noopener noreferrer">^8</a></p>
<h2>Продвинутые техники</h2>
<h3>Использование с callback функциями</h3>
<p dir="auto">Параметр <code>thisArg</code> позволяет контролировать контекст выполнения mapper функции:<a href="https://teamtreehouse.com/community/when-might-you-use-the-thisarg-parameter" target="_blank" rel="noopener noreferrer">^10</a></p>
<pre><code class="language-javascript">const processor = {
    multiplier: 2,
    process(x) { return x * this.multiplier; }
};

Array.from([1, 2, 3], processor.process, processor); // [2, 4, 6]
</code></pre>
<h3>Создание многомерных структур</h3>
<pre><code class="language-javascript">// Двумерный массив
const matrix = Array.from({length: 3}, () =&gt; 
    Array.from({length: 3}, () =&gt; 0)
);
// &lsqb;&lsqb;0, 0, 0], [0, 0, 0], [0, 0, 0&rsqb;&rsqb;
</code></pre>
<h2>Рекомендации по использованию</h2>
<p dir="auto"><strong>Выбирайте Array.from() когда:</strong></p>
<ul>
<li>Работаете с массивоподобными объектами (NodeList, arguments)</li>
<li>Нужно одновременно преобразовать и обработать данные</li>
<li>Приоритет — читаемость и декларативность кода</li>
<li>Требуется совместимость с различными источниками данных</li>
</ul>
<p dir="auto"><strong>Используйте альтернативы когда:</strong></p>
<ul>
<li>Критична максимальная производительность для больших объёмов данных</li>
<li>Работаете только с итерируемыми объектами (используйте spread оператор)</li>
<li>Нужно просто скопировать существующий массив</li>
</ul>
<p dir="auto"><code>Array.from()</code> остается одним из самых элегантных и функциональных инструментов современного JavaScript для работы с коллекциями данных, обеспечивая баланс между производительностью, читаемостью и универсальностью применения.<br />
<span style="display:none"><a href="https://dev.to/maafaishal/benchmarking-for-while-forof-and-arrayforeach-using-performancenow-1jjg" target="_blank" rel="noopener noreferrer">^12</a><a href="https://stackoverflow.com/questions/8423493/what-is-the-performance-of-objects-arrays-in-javascript-specifically-for-googl" target="_blank" rel="noopener noreferrer">^14</a><a href="https://javascript.plainenglish.io/4-places-you-can-use-array-from-in-javascript-2874a994f4be" target="_blank" rel="noopener noreferrer">^16</a><a href="https://jonlinnell.co.uk/articles/spread-operator-performance" target="_blank" rel="noopener noreferrer">^18</a><a href="https://jsbench.me/nnjy06ymrj/1" target="_blank" rel="noopener noreferrer">^20</a><a href="https://stackoverflow.com/questions/62388864/how-to-write-a-javascript-array-from-map-function" target="_blank" rel="noopener noreferrer">^22</a><a href="https://dev.to/petrtcoi/performance-of-the-spread-operator-2bpk" target="_blank" rel="noopener noreferrer">^24</a><a href="https://stackoverflow.com/questions/52271899/why-is-there-such-big-performance-difference-between-browsers-array-operations" target="_blank" rel="noopener noreferrer">^26</a><a href="https://stackoverflow.com/questions/3746725/how-to-create-an-array-containing-1-n" target="_blank" rel="noopener noreferrer">^28</a><a href="https://discuss.pytorch.org/t/memory-usage-when-calculating-an-array-by-chunks/183569" target="_blank" rel="noopener noreferrer">^30</a><a href="https://forum.arduino.cc/t/string-vs-array-memory-usage/328252" target="_blank" rel="noopener noreferrer">^32</a><a href="https://www.reddit.com/r/javascript/comments/qozwde/askjs_does_a_very_large_array_cause_performance/" target="_blank" rel="noopener noreferrer">^34</a><a href="https://users.rust-lang.org/t/how-to-create-a-sequence-of-from-to-step/78150" target="_blank" rel="noopener noreferrer">^36</a><a href="https://gist.github.com/nikic/5015323" target="_blank" rel="noopener noreferrer">^38</a><a href="https://forums.ni.com/t5/LabVIEW/Memory-usage-for-insert-into-array-compared-to-reshape-array/td-p/4397362" target="_blank" rel="noopener noreferrer">^40</a><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array" target="_blank" rel="noopener noreferrer">^42</a><a href="https://stackoverflow.com/questions/12760643/how-to-convert-a-javascript-typed-array-into-a-javascript-array" target="_blank" rel="noopener noreferrer">^44</a><a href="https://codeburst.io/polyfills-transpilation-and-browser-support-566cc66ee0f8" target="_blank" rel="noopener noreferrer">^46</a><a href="https://stackoverflow.com/questions/36810940/alternative-or-polyfill-for-array-from-on-the-internet-explorer" target="_blank" rel="noopener noreferrer">^48</a><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach" target="_blank" rel="noopener noreferrer">^50</a><a href="https://discourse.threejs.org/t/is-the-conversion-of-an-array-into-float32array-rather-than-just-making-a-float32array-to-start-intentional/63836" target="_blank" rel="noopener noreferrer">^52</a><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill" target="_blank" rel="noopener noreferrer">^54</a><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" target="_blank" rel="noopener noreferrer">^56</a></span></p>
<div>⁂</div>
]]></description><link>https://forum.exlends.ru/topic/294/polnoe-rukovodstvo-po-array.from-v-javascript</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 20:55:28 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/294.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 22 Oct 2025 12:47:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Полное руководство по Array.from() в JavaScript on Thu, 23 Oct 2025 06:56:32 GMT]]></title><description><![CDATA[<p dir="auto">Интересно, особенно про многомерные структуры. Вот где они пригодились?</p>
<p dir="auto">А вообще удобно кстати, можно через аргумент в N передавать уже какие-то данные и строить так массив.</p>
<pre><code>Array.from({length: N}, () =&gt; value)
</code></pre>
<p dir="auto">Как по мне тема массивов вообще одна из самых интересных, так что давай больше про массивы.<br />
Хотелось бы что-то не ординарное))</p>
]]></description><link>https://forum.exlends.ru/post/922</link><guid isPermaLink="true">https://forum.exlends.ru/post/922</guid><dc:creator><![CDATA[kirilljsx]]></dc:creator><pubDate>Thu, 23 Oct 2025 06:56:32 GMT</pubDate></item></channel></rss>