aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/javascript/reference/global_objects/array
diff options
context:
space:
mode:
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.html14
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/array/sort/index.html67
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">&lt;</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">&gt;</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 &lt; nameB) {
+ return -1;
+ }
+ if (nameA &gt; 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">