aboutsummaryrefslogtreecommitdiff
path: root/files/ca/web/javascript/reference/global_objects/array/foreach
diff options
context:
space:
mode:
authorFlorian Merz <me@fiji-flo.de>2021-02-11 14:45:12 +0100
committerFlorian Merz <me@fiji-flo.de>2021-02-11 14:45:12 +0100
commitcb9e359a51c3249d8f5157db69d43fd413ddeda6 (patch)
treeae3040d626c3b5717da5bda2af9f0a9ff9bd389f /files/ca/web/javascript/reference/global_objects/array/foreach
parent8260a606c143e6b55a467edf017a56bdcd6cba7e (diff)
downloadtranslated-content-cb9e359a51c3249d8f5157db69d43fd413ddeda6.tar.gz
translated-content-cb9e359a51c3249d8f5157db69d43fd413ddeda6.tar.bz2
translated-content-cb9e359a51c3249d8f5157db69d43fd413ddeda6.zip
unslug ca: move
Diffstat (limited to 'files/ca/web/javascript/reference/global_objects/array/foreach')
-rw-r--r--files/ca/web/javascript/reference/global_objects/array/foreach/index.html238
1 files changed, 238 insertions, 0 deletions
diff --git a/files/ca/web/javascript/reference/global_objects/array/foreach/index.html b/files/ca/web/javascript/reference/global_objects/array/foreach/index.html
new file mode 100644
index 0000000000..4d391346eb
--- /dev/null
+++ b/files/ca/web/javascript/reference/global_objects/array/foreach/index.html
@@ -0,0 +1,238 @@
+---
+title: Array.prototype.forEach()
+slug: Web/JavaScript/Referencia/Objectes_globals/Array/forEach
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/forEach
+---
+<div>{{JSRef}}</div>
+
+<p>El mètode <code><strong>forEach()</strong></code> executa la funció rebuda un cop per cada element de l'array.</p>
+
+<h2 id="Sintaxi">Sintaxi</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.forEach(<var>callback</var>[, <var>thisArg</var>])</code></pre>
+
+<h3 id="Paràmetres">Paràmetres</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Funció a executar per a cada element. Aquesta funció rebrà tres paràmetres:
+ <dl>
+ <dt><code>valor</code></dt>
+ <dd>L'element que s'està processant ara mateix a l'array.</dd>
+ <dt><code>posició</code></dt>
+ <dd>La posició que l'element actual ocupa dins l'array.</dd>
+ <dt><code>array</code></dt>
+ <dd>L'array al qual el mètode <code>forEach</code> s'aplica.</dd>
+ </dl>
+ </dd>
+ <dt><code>thisArg</code></dt>
+ <dd>Opcional. Valor que s'utilitzarà com a <code>this</code> a l'hora d'executar la funció <code>callback</code>.</dd>
+</dl>
+
+<h2 id="Descripció">Descripció</h2>
+
+<p><code>forEach()</code> executa la funció <code>callback</code> rebuda com a argument un cop per cada element present a l'array, en ordre ascendent. No es cridarà la funció per a elements que s'hagin eliminat o que no hagin rebut cap valor (és a dir, arrays disperses).</p>
+
+<p>S'invocarà <code>callback</code> amb els <strong>tres arguments</strong> següents:</p>
+
+<ul>
+ <li>el <strong>valor de l'element</strong></li>
+ <li>la <strong>posició de l'element</strong></li>
+ <li>L'<strong>array que s'està recorrent</strong></li>
+</ul>
+
+<p>Si es proporciona el paràmetre <code>thisArg</code> a <code>forEach()</code>, aquest es passarà a <code>callback</code> quan es cridi, i es podrà accedir a ell mitjançant la paraula clau <code>this</code>. En el cas que no es proporcioni el paràmetre <code>this</code> rebrà el valor {{jsxref("undefined")}}. El valor de <code>this</code> que serà observable per <code>callback</code> es determina d'acord a les <a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">regles usuals per a determinar el valor de <code>this</code> que una funció veu</a>.</p>
+
+<p>El rang dels elements processats per <code>forEach()</code> és determinat abans de la primera invocació de <code>callback</code>. Els elements que s'afegeixin a l'array després de la crida a <code>forEach()</code> no seran visitats per la funció <code>callback</code>. En el cas que es canviï el valor dels elements de l'array el valor que es passarà a <code>callback</code> serà el valor que tingui l'element en el moment que es visita. Els elements que s'han eliminat abans de ser visitats no es visitaran.</p>
+
+<p><code>forEach()</code> executa la funció <code>callback</code> un cop per cada element de l'array; a diferència de {{jsxref("Array.prototype.map()", "map()")}} i {{jsxref("Array.prototype.reduce()", "reduce()")}}, sempre retorna el valor {{jsxref("undefined")}} i no es pot encadenar. El cas d'ús típic és per executar efectes secundaris al final de la cadena.</p>
+
+<div class="note">
+<p><strong>Nota:</strong> L'única forma d'aturar un bucle <code>forEach()</code> és llençar una excepció. Si es requereix aquesta funcionalitat llavors el mètode <code>.forEach()</code> és l'eina incorrecta i es recomana utilitzar un bucle normal. Si el que es pretén és validar els elements d'un array contra un predicat i es requereix retornar un valor booleà, es recomana utilitzar la funció {{jsxref("Array.prototype.every()", "every()")}} o bé {{jsxref("Array.prototype.some()", "some()")}}.</p>
+</div>
+
+<h2 id="Exemples">Exemples</h2>
+
+<h3 id="Imprimir_el_contingut_d'un_array">Imprimir el contingut d'un array</h3>
+
+<p>El codi següent mostra una línia per a cada element de l'array:</p>
+
+<pre class="brush:js">function logArrayElements(element, index, array) {
+ console.log('a[' + index + '] = ' + element);
+}
+
+// Cal destacar l'omissió, no hi ha cap element a la posició 2 així que aquesta no es visita
+[2, 5, , 9].forEach(logArrayElements);
+// Mostra:
+// a[0] = 2
+// a[1] = 5
+// a[3] = 9
+</pre>
+
+<h3 id="Una_funció_per_a_copiar_objectes">Una funció per a copiar objectes</h3>
+
+<p>El codi següent crea una copia de l'objecte donat. Hi ha diverses formes de crear una copia d'un objecte, la forma següent és simplement una d'elles i es presenta per a explicar com funciona <code>Array.prototype.forEach()</code> tot utilitzant les funcions de meta-propietats de l'ECMAScript 5 a <code>Object.*</code></p>
+
+<pre class="brush: js">function copy(obj) {
+ var copy = Object.create(Object.getPrototypeOf(obj));
+ var propNames = Object.getOwnPropertyNames(obj);
+
+ propNames.forEach(function(name) {
+ var desc = Object.getOwnPropertyDescriptor(obj, name);
+ Object.defineProperty(copy, name, desc);
+ });
+
+ return copy;
+}
+
+var obj1 = { a: 1, b: 2 };
+var obj2 = copy(obj1); // obj2 looks like o1 now
+</pre>
+
+<h2 id="Polyfill">Polyfill</h2>
+
+<p><code>forEach()</code> va ser afegida l'standard ECMA-262 en la cinquena edició; per aquest motiu aquesta funció pot no estar present en altres implementacions de l'standard. Es pot solventar aquest problema inserint el codi següent a l'inici dels vostres scripts. Això permetrà l'ús de <code>forEach()</code> en implementacions que no el suportin de forma nativa. Aquest algoritme és el mateix que l'especificat a l'ECMA-262, cinquena edició, si assumim que {{jsxref("Object")}} i {{jsxref("TypeError")}} tenen els seus valors originals i que <code>callback.call</code> es resol com al valor original de {{jsxref("Function.prototype.call()")}}.</p>
+
+<pre class="brush: js">// Production steps of ECMA-262, Edition 5, 15.4.4.18
+// Reference: http://es5.github.io/#x15.4.4.18
+if (!Array.prototype.forEach) {
+
+ Array.prototype.forEach = function(callback, thisArg) {
+
+ var T, k;
+
+ if (this == null) {
+ throw new TypeError(' this is null or not defined');
+ }
+
+ // 1. Assignem a O el resultat de cridar ToObject tot passant-li el valor de |this| com a argument.
+ var O = Object(this);
+
+ // 2. lenValue representa el resultat de cridar el mètode intern Get de O amb l'argument "length".
+ // 3. Assignem a len el valor ToUint32(lenValue).
+ var len = O.length &gt;&gt;&gt; 0;
+
+ // 4. Si IsCallable(callback) és false, llençem una excepció TypeError.
+ // Vegeu: http://es5.github.com/#x9.11
+ if (typeof callback !== "function") {
+ throw new TypeError(callback + ' no és una funció');
+ }
+
+ // 5. Si s'ha passat thisArg com a aragument, assignem el seu valor a la variable T, en qualsevol altre cas deixem T com a undefined.
+ if (arguments.length &gt; 1) {
+ T = thisArg;
+ }
+
+ // 6. Assignem 0 a la variable k
+ k = 0;
+
+ // 7. Repetir, mentre k &lt; len
+ while (k &lt; len) {
+
+ var kValue;
+
+ // a. Assignem ToString(k) a Pk.
+ // Aquest comportament és implícit per a operands al cantó esquerra (de l'anglés LHS o Left-Hand-Side) de l'operador "in"This is implicit for LHS operands of the in operator
+ // b. Assignem el resultat de cridar el mètode intern HasProperty de O amb l'argument Pk a la variable kPresent
+ // Podem combinar aquest pas amb c
+ // c. Si kPresent és true, llavors...
+ if (k in O) {
+
+ // i. Assignem a kValue el resultat de cridar el mètode intern Get de l'objecte O amb l'argument Pk.
+ kValue = O[k];
+
+ // ii. Cridem el mètode intern "call" del callback tot passant-li T com a valor de "this"
+ // així com una llista d'arguments que conté kValue, k i 0
+ callback.call(T, kValue, k, O);
+ }
+ // d. Incrementem el valor de k en 1.
+ k++;
+ }
+ // 8. retornem undefined
+ };
+}
+</pre>
+
+<h2 id="Especificacions">Especificacions</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Especificació</th>
+ <th scope="col">Estat</th>
+ <th scope="col">Comentaris</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.18', 'Array.prototype.forEach')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Definició inicial. Implementat a JavaScript 1.6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.foreach', 'Array.prototype.forEach')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Compatibilitat_amb_navegadors">Compatibilitat amb navegadors</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Característica</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Suport bàsic</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.8")}}</td>
+ <td>{{CompatIE("9")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Característica</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Suport bàsic</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.8")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Vegeu_també">Vegeu també</h2>
+
+<ul>
+ <li>{{jsxref("Map.prototype.forEach()")}}</li>
+ <li>{{jsxref("Set.prototype.forEach()")}}</li>
+ <li>{{jsxref("Array.prototype.map()")}}</li>
+ <li>{{jsxref("Array.prototype.every()")}}</li>
+ <li>{{jsxref("Array.prototype.some()")}}</li>
+</ul>