diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
commit | 074785cea106179cb3305637055ab0a009ca74f2 (patch) | |
tree | e6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/ru/web/javascript/reference/global_objects/array/reduceright | |
parent | da78a9e329e272dedb2400b79a3bdeebff387d47 (diff) | |
download | translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2 translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip |
initial commit
Diffstat (limited to 'files/ru/web/javascript/reference/global_objects/array/reduceright')
-rw-r--r-- | files/ru/web/javascript/reference/global_objects/array/reduceright/index.html | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/files/ru/web/javascript/reference/global_objects/array/reduceright/index.html b/files/ru/web/javascript/reference/global_objects/array/reduceright/index.html new file mode 100644 index 0000000000..08bb7e978d --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/array/reduceright/index.html @@ -0,0 +1,290 @@ +--- +title: Array.prototype.reduceRight() +slug: Web/JavaScript/Reference/Global_Objects/Array/reduceRight +tags: + - Array + - ECMAScript5 + - JavaScript + - JavaScript 1.8 + - Method + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/ReduceRight +--- +<div>{{JSRef("Global_Objects", "Array")}}</div> + +<h2 id="Summary" name="Summary">Сводка</h2> +<p>Метод <code><strong>reduceRight()</strong></code> применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.</p> + +<h2 id="Syntax" name="Syntax">Синтаксис</h2> +<pre class="syntaxbox"><code><var>arr</var>.reduceRight(<var>callback</var>[, <var>initialValue</var>])</code></pre> + +<h3 id="Parameters" name="Parameters">Параметры</h3> +<dl> + <dt><code>callback</code></dt> + <dd>Функция, выполняющаяся для каждого элемента массива, принимает четыре аргумента: + <dl> + <dt><code>previousValue</code></dt> + <dd>Значение, возвращённое предыдущим выполнением функции <code>callback</code>, либо значение <code>initialValue</code>, если оно предоставлено (смотрите пояснения ниже).</dd> + <dt><code>currentValue</code></dt> + <dd>Текущий обрабатываемый элемент массива.</dd> + <dt><code>index</code></dt> + <dd>Индекс текущего обрабатываемого элемента массива.</dd> + <dt><code>array</code></dt> + <dd>Массив, для которого была вызвана функция <code>reduceRight</code>.</dd> + </dl> + </dd> + <dt><code>initialValue</code></dt> + <dd>Необязательный параметр. Объект, используемый в качестве первого аргумента при первом вызове функции <code>callback</code>.</dd> +</dl> + +<h2 id="Description" name="Description">Описание</h2> +<p>Метод <code>reduceRight()</code> выполняет функцию <code>callback</code> один раз для каждого элемента, присутствующего в массиве, за исключением пустот, принимая четыре аргумента: начальное значение (или значение от предыдущего вызова <code>callback</code>), значение текущего элемента, текущий индекс и массив, по которому происходит итерация.</p> +<p>Вызов функции обратного вызова <code>callback</code> будет выглядеть так:</p> +<pre class="brush: js">array.reduceRight(function(previousValue, currentValue, index, array) { + // ... +}); +</pre> +<p>При первом вызове функции, параметры <code>previousValue</code> и <code>currentValue</code> могут принимать одно из двух значений. Если при вызове <code>reduceRight()</code> передан аргумент <code>initialValue</code>, то значение <code>previousValue</code> будет равным значению <code>initialValue</code>, а значение <code>currentValue</code> будет равным последнему значению в массиве. Если аргумент <code>initialValue</code> не задан, то значение <code>previousValue</code> будет равным последнему значению в массиве, а значение <code>currentValue</code> будет равным второму с конца значению в массиве.</p> +<p>Если массив пустой и аргумент <code>initialValue</code> не указан, будет брошено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. Если массив состоит только из одного элемента (независимо от его положения в массиве) и аргумент <code>initialValue</code> не указан, или если аргумент <code>initialValue</code> указан, но массив пустой, то будет возвращено одно это значение, без вызова функции <code>callback</code>.</p> +<p>Вот так будут выглядеть некоторый примеры прогона функции:</p> +<pre class="brush: js">[0, 1, 2, 3, 4].reduceRight(function(previousValue, currentValue, index, array) { + return previousValue + currentValue; +}); +</pre> +<p>Функция обратного вызова будет вызвана четыре раза, аргументы и возвращаемое значение при каждом вызове будут следующими:</p> +<table style="width: 100%;"> + <thead> + <tr> + <th scope="col"> </th> + <th scope="col"><code>previousValue</code></th> + <th scope="col"><code>currentValue</code></th> + <th scope="col"><code>index</code></th> + <th scope="col"><code>array</code></th> + <th scope="col">возвращаемое значение</th> + </tr> + </thead> + <tbody> + <tr> + <th scope="row">первый вызов</th> + <td><code>4</code></td> + <td><code>3</code></td> + <td><code>3</code></td> + <td><code>[0, 1, 2, 3, 4]</code></td> + <td><code>7</code></td> + </tr> + <tr> + <th scope="row">второй вызов</th> + <td><code>7</code></td> + <td><code>2</code></td> + <td><code>2</code></td> + <td><code>[0, 1, 2, 3, 4]</code></td> + <td><code>9</code></td> + </tr> + <tr> + <th scope="row">третий вызов</th> + <td><code>9</code></td> + <td><code>1</code></td> + <td><code>1</code></td> + <td><code>[0, 1, 2, 3, 4]</code></td> + <td><code>10</code></td> + </tr> + <tr> + <th scope="row">четвёртый вызов</th> + <td><code>10</code></td> + <td><code>0</code></td> + <td><code>0</code></td> + <td><code>[0, 1, 2, 3, 4]</code></td> + <td><code>10</code></td> + </tr> + </tbody> +</table> +<p>Значение, возвращённое методом <code>reduceRight()</code> будет равным последнему результату выполнения функции обратного вызова (<code>10</code>).</p> +<p>Если же вы зададите начальное значение <code>initialValue</code>, результат будет выглядеть так:</p> +<pre class="brush: js">[0, 1, 2, 3, 4].reduceRight(function(previousValue, currentValue, index, array) { + return previousValue + currentValue; +}, 10); +</pre> +<table style="width: 100%;"> + <thead> + <tr> + <th scope="col"> </th> + <th scope="col"><code>previousValue</code></th> + <th scope="col"><code>currentValue</code></th> + <th scope="col"><code>index</code></th> + <th scope="col"><code>array</code></th> + <th scope="col">возвращаемое значение</th> + </tr> + </thead> + <tbody> + <tr> + <th scope="row">первый вызов</th> + <td><code>10</code></td> + <td><code>4</code></td> + <td><code>4</code></td> + <td><code>[0, 1, 2, 3, 4]</code></td> + <td><code>14</code></td> + </tr> + <tr> + <th scope="row">второй вызов</th> + <td><code>14</code></td> + <td><code>3</code></td> + <td><code>3</code></td> + <td><code>[0, 1, 2, 3, 4]</code></td> + <td><code>17</code></td> + </tr> + <tr> + <th scope="row">третий вызов</th> + <td><code>17</code></td> + <td><code>2</code></td> + <td><code>2</code></td> + <td><code>[0, 1, 2, 3, 4]</code></td> + <td><code>19</code></td> + </tr> + <tr> + <th scope="row">четвёртый вызов</th> + <td><code>19</code></td> + <td><code>1</code></td> + <td><code>1</code></td> + <td><code>[0, 1, 2, 3, 4]</code></td> + <td><code>20</code></td> + </tr> + <tr> + <th scope="row">пятый вызов</th> + <td><code>20</code></td> + <td><code>0</code></td> + <td><code>0</code></td> + <td><code>[0, 1, 2, 3, 4]</code></td> + <td><code>20</code></td> + </tr> + </tbody> +</table> +<p>Значение, возвращённое методом <code>reduceRight()</code> на этот раз, конечно же, будет равным <code>20</code>.</p> + +<h2 id="Examples" name="Examples">Примеры</h2> + +<h3 id="Example:_Sum_up_all_values_within_an_array" name="Example:_Sum_up_all_values_within_an_array">Пример: суммирование всех значений в массиве</h3> +<pre class="brush: js">var total = [0, 1, 2, 3].reduceRight(function(a, b) { + return a + b; +}); +// total == 6 +</pre> + +<h3 id="Example:_Flatten_an_array_of_arrays" name="Example:_Flatten_an_array_of_arrays">Пример: разворачивание массива массивов</h3> +<pre class="brush: js">var flattened = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) { + return a.concat(b); +}, []); +// flattened равен [4, 5, 2, 3, 0, 1] +</pre> + +<h2 id="Polyfill" name="Polyfill">Полифилл</h2> +<p>Метод <code>Array.prototype.reduceRight()</code> был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать <code>reduceRight()</code> в реализациях, которые не поддерживают этот метод.</p> +<pre class="brush: js">// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.22 +// Ссылка (en): http://es5.github.io/#x15.4.4.22 +// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.22 +if ('function' !== typeof Array.prototype.reduceRight) { + Array.prototype.reduceRight = function(callback/*, initialValue*/) { + 'use strict'; + if (null === this || 'undefined' === typeof this) { + throw new TypeError('Array.prototype.reduce called on null or undefined'); + } + if ('function' !== typeof callback) { + throw new TypeError(callback + ' is not a function'); + } + var t = Object(this), len = t.length >>> 0, k = len - 1, value; + if (arguments.length >= 2) { + value = arguments[1]; + } else { + while (k >= 0 && !k in t) { + k--; + } + if (k < 0) { + throw new TypeError('Reduce of empty array with no initial value'); + } + value = t[k--]; + } + for (; k >= 0; k--) { + if (k in t) { + value = callback(value, t[k], k, t); + } + } + return value; + }; +} +</pre> + +<h2 id="Specifications" name="Specifications">Спецификации</h2> +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Спецификация</th> + <th scope="col">Статус</th> + <th scope="col">Комментарии</th> + </tr> + <tr> + <td>{{SpecName('ES5.1', '#sec-15.4.4.22', 'Array.prototype.reduceRight')}}</td> + <td>{{Spec2('ES5.1')}}</td> + <td>Изначальное определение. Реализована в JavaScript 1.8.</td> + </tr> + <tr> + <td>{{SpecName('ES6', '#sec-array.prototype.reduceright', 'Array.prototype.reduceRight')}}</td> + <td>{{Spec2('ES6')}}</td> + <td> </td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2> +<div>{{CompatibilityTable}}</div> +<div id="compat-desktop"> + <table class="compat-table"> + <tbody> + <tr> + <th>Возможность</th> + <th>Chrome</th> + <th>Firefox (Gecko)</th> + <th>Internet Explorer</th> + <th>Opera</th> + <th>Safari</th> + </tr> + <tr> + <td>Базовая поддержка</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatGeckoDesktop("1.9")}}</td> + <td>{{CompatIE("9")}}</td> + <td>{{CompatOpera("10.5")}}</td> + <td>{{CompatSafari("4.0")}}</td> + </tr> + </tbody> + </table> +</div> +<div id="compat-mobile"> + <table class="compat-table"> + <tbody> + <tr> + <th>Возможность</th> + <th>Android</th> + <th>Chrome для Android</th> + <th>Firefox Mobile (Gecko)</th> + <th>IE Mobile</th> + <th>Opera Mobile</th> + <th>Safari Mobile</th> + </tr> + <tr> + <td>Базовая поддержка</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + </tr> + </tbody> + </table> +</div> + +<h2 id="See_also" name="See_also">Смотрите также</h2> +<ul> + <li>{{jsxref("Array.prototype.reduce()")}}</li> +</ul> |