diff options
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/array')
| -rw-r--r-- | files/zh-cn/web/javascript/reference/global_objects/array/includes/index.html | 14 | ||||
| -rw-r--r-- | files/zh-cn/web/javascript/reference/global_objects/array/sort/index.html | 67 |
2 files changed, 60 insertions, 21 deletions
diff --git a/files/zh-cn/web/javascript/reference/global_objects/array/includes/index.html b/files/zh-cn/web/javascript/reference/global_objects/array/includes/index.html index 183d9978b3..5001b155be 100644 --- a/files/zh-cn/web/javascript/reference/global_objects/array/includes/index.html +++ b/files/zh-cn/web/javascript/reference/global_objects/array/includes/index.html @@ -11,7 +11,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/includes --- <div>{{JSRef}} </div> -<p><code><strong>includes()</strong></code> 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。</p> +<p><code><strong>includes()</strong></code> 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 <code>true</code>,否则返回 <code>false</code>。</p> <div>{{EmbedInteractiveExample("pages/js/array-includes.html")}}</div> @@ -29,7 +29,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/includes <p>需要查找的元素值。</p> <div class="blockIndicator note"> - <p><strong>Note: </strong>使用<strong> </strong><code>includes()</code>比较字符串和字符时是区分大小写。</p> + <p><strong>Note: </strong>使用<strong> </strong><code>includes()</code>比较字符串和字符时是区分大小写的。</p> </div> </dd> <dt><code>fromIndex</code> {{optional_inline}}</dt> @@ -38,12 +38,12 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/includes <h3 id="返回值">返回值</h3> -<p>A {{jsxref("Boolean")}} which is <code>true</code> if the value <code>valueToFind</code> is found within the array (or the part of the array indicated by the index <code>fromIndex</code>, if specified). Values of zero are all considered to be equal regardless of sign (that is, -0 is considered to be equal to both 0 and +0), but <code>false</code> is not considered to be the same as 0.</p> +<p>返回一个布尔值 {{jsxref("Boolean")}} 。<br>]如果在数组中(或 <code>fromIndex</code> 指定的范围中)找到了 <code>valueToFind</code>,则返回 <code>true</code>,否则返回 <code>false</code>。</p> -<p>返回一个布尔值 {{jsxref("Boolean")}} ,如果在数组中找到了(如果传入了 <code>fromIndex</code> ,表示在 <code>fromIndex</code> 指定的索引范围中找到了)则返回 <code>true</code> 。</p> +<p>0 的值将全部视为相等,与符号无关(即 -0 与 0 和 +0 相等),但 <code>false</code> 不被认为与 0 相等。</p> <div class="note"> -<p><strong>Note:</strong> Technically speaking, <code>includes()</code> uses the <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality">sameValueZero</a></code> algorithm to determine whether the given element is found.</p> +<p><strong>Note:</strong> 技术上来讲,<code>includes()</code> 使用 <code><a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness#%E9%9B%B6%E5%80%BC%E7%9B%B8%E7%AD%89">零值相等</a></code> 算法来确定是否找到给定的元素。</p> </div> <h2 id="示例">示例</h2> @@ -57,7 +57,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/includes <h3 id="fromIndex_大于等于数组长度">fromIndex 大于等于数组长度</h3> -<p>如果 <code>fromIndex</code> 大于等于数组的长度,则会返回 <code>false</code>,且该数组不会被搜索。</p> +<p>如果 <code>fromIndex</code> 大于等于数组的长度,则将直接返回 <code>false</code>,且不搜索该数组。</p> <pre class="brush: js">var arr = ['a', 'b', 'c']; @@ -66,7 +66,7 @@ arr.includes('c', 100); // false</pre> <h3 id="计算出的索引小于_0">计算出的索引小于 0</h3> -<p>如果 <code>fromIndex </code>为负值,计算出的索引将作为开始搜索<code>searchElement</code>的位置。如果计算出的索引小于 0,则整个数组都会被搜索。</p> +<p>如果 <code>fromIndex</code> 为负值,计算出的索引将作为开始搜索<code>searchElement</code>的位置。如果计算出的索引小于 0,则整个数组都会被搜索。</p> <pre class="brush: js">// array length is 3 // fromIndex is -100 diff --git a/files/zh-cn/web/javascript/reference/global_objects/array/sort/index.html b/files/zh-cn/web/javascript/reference/global_objects/array/sort/index.html index e9f9808420..e4140bde3b 100644 --- a/files/zh-cn/web/javascript/reference/global_objects/array/sort/index.html +++ b/files/zh-cn/web/javascript/reference/global_objects/array/sort/index.html @@ -114,20 +114,20 @@ items.sort(function (a, b) { return (a.value - b.value) }); -<code class="language-js"><span class="comment token">// sort by name</span> -items<span class="punctuation token">.</span><span class="function token">sort</span><span class="punctuation token">(</span><span class="keyword token">function</span><span class="punctuation token">(</span>a<span class="punctuation token">,</span> b<span class="punctuation token">)</span> <span class="punctuation token">{</span> - <span class="keyword token">var</span> nameA <span class="operator token">=</span> a<span class="punctuation token">.</span>name<span class="punctuation token">.</span><span class="function token">toUpperCase</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// ignore upper and lowercase</span> - <span class="keyword token">var</span> nameB <span class="operator token">=</span> b<span class="punctuation token">.</span>name<span class="punctuation token">.</span><span class="function token">toUpperCase</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// ignore upper and lowercase</span> - <span class="keyword token">if</span> <span class="punctuation token">(</span>nameA <span class="operator token"><</span> nameB<span class="punctuation token">)</span> <span class="punctuation token">{</span> - <span class="keyword token">return</span> <span class="operator token">-</span><span class="number token">1</span><span class="punctuation token">;</span> - <span class="punctuation token">}</span> - <span class="keyword token">if</span> <span class="punctuation token">(</span>nameA <span class="operator token">></span> nameB<span class="punctuation token">)</span> <span class="punctuation token">{</span> - <span class="keyword token">return</span> <span class="number token">1</span><span class="punctuation token">;</span> - <span class="punctuation token">}</span></code> - - <span class="comment token">// names must be equal</span> - <span class="keyword token">return</span> <span class="number token">0</span><span class="punctuation token">;</span> -<span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span></pre> +// sort by name +items.sort(function(a, b) { + var nameA = a.name.toUpperCase(); // ignore upper and lowercase + var nameB = b.name.toUpperCase(); // ignore upper and lowercase + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + + // names must be equal + return 0; +});</pre> <h2 id="Examples" name="Examples">示例</h2> @@ -214,6 +214,45 @@ var result = mapped.map(function(el){ }); </pre> +<h3 id="sort_stability">排序稳定性</h3> + +<p>自 ES10(EcmaScript 2019)起,<a href="https://tc39.es/ecma262/#sec-array.prototype.sort">规范</a> 要求 <code>Array.prototype.sort</code> 为稳定排序。</p> +<p>假设有一个包含学生名字和年级的列表,已经将它按学生名字字母顺序进行预排序:</p> +<pre class="brush: js">const students = [ + { name: "Alex", grade: 15 }, + { name: "Devlin", grade: 15 }, + { name: "Eagle", grade: 13 }, + { name: "Sam", grade: 14 }, +]; +</pre> + +<p>对这个数组执行 <code>grade</code> 升序排序后:</p> + +<pre class="brush: js">students.sort((firstItem, secondItem) => firstItem.grade - secondItem.grade); +</pre> + +<p><code>students</code> 变量如下:</p> + +<pre class="brush: js">[ + { name: "Eagle", grade: 13 }, + { name: "Sam", grade: 14 }, + { name: "Alex", grade: 15 }, // grade 相同时维持原先的顺序 (稳定排序) + { name: "Devlin", grade: 15 }, // grade 相同时维持原先的顺序 (稳定排序) +]; +</pre> + +<p>注意,那些年级相同的学生(如 Alex 和 Devlin)会维持调用排序之前的顺序,这是稳定排序所确保的。</p> + +<p>ES10(EcmaScript 2019)以前没有要求稳定性,意味着你可能会得到以下结果:</p> + +<pre class="brush: js">[ + { name: "Eagle", grade: 13 }, + { name: "Sam", grade: 14 }, + { name: "Devlin", grade: 15 }, // 没有维持原先的顺序 + { name: "Alex", grade: 15 }, // 没有维持原先的顺序 +]; +</pre> + <h2 id="Specifications" name="Specifications">规范</h2> <table class="standard-table"> |
