From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../global_objects/array/entries/index.html | 154 +++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 files/zh-cn/web/javascript/reference/global_objects/array/entries/index.html (limited to 'files/zh-cn/web/javascript/reference/global_objects/array/entries/index.html') diff --git a/files/zh-cn/web/javascript/reference/global_objects/array/entries/index.html b/files/zh-cn/web/javascript/reference/global_objects/array/entries/index.html new file mode 100644 index 0000000000..6d2d0018a8 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/array/entries/index.html @@ -0,0 +1,154 @@ +--- +title: Array.prototype.entries() +slug: Web/JavaScript/Reference/Global_Objects/Array/entries +tags: + - Array.prototype.entries() +translation_of: Web/JavaScript/Reference/Global_Objects/Array/entries +--- +
{{JSRef}}
+ +

entries() 方法返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。

+ +

{{EmbedInteractiveExample("pages/js/array-entries.html")}}

+ +

语法

+ +
arr.entries()
+ +

返回值

+ +

一个新的 {{jsxref("Array")}} 迭代器对象。Array Iterator是对象,它的原型(__proto__:Array Iterator)上有一个next方法,可用用于遍历迭代器取得原数组的[key,value]。

+ +

示例

+ +

1、 Array Iterator

+ +
var arr = ["a", "b", "c"];
+var iterator = arr.entries();
+console.log(iterator);
+
+/*Array Iterator {}
+         __proto__:Array Iterator
+         next:ƒ next()
+         Symbol(Symbol.toStringTag):"Array Iterator"
+         __proto__:Object
+*/
+ +

2、iterator.next()

+ +
var arr = ["a", "b", "c"];
+var iterator = arr.entries();
+console.log(iterator.next());
+
+/*{value: Array(2), done: false}
+          done:false
+          value:(2) [0, "a"]
+           __proto__: Object
+*/
+// iterator.next()返回一个对象,对于有元素的数组,
+// 是next{ value: Array(2), done: false };
+// next.done 用于指示迭代器是否完成:在每次迭代时进行更新而且都是false,
+// 直到迭代器结束done才是true。
+// next.value是一个["key","value"]的数组,是返回的迭代器中的元素值。
+
+ +

3、iterator.next方法运行

+ +
var arr = ["a", "b", "c"];
+var iter = arr.entries();
+var a = [];
+
+// for(var i=0; i< arr.length; i++){   // 实际使用的是这个
+for(var i=0; i< arr.length+1; i++){    // 注意,是length+1,比数组的长度大
+    var tem = iter.next();             // 每次迭代时更新next
+    console.log(tem.done);             // 这里可以看到更新后的done都是false
+    if(tem.done !== true){             // 遍历迭代器结束done才是true
+        console.log(tem.value);
+        a[i]=tem.value;
+    }
+}
+
+console.log(a);                         // 遍历完毕,输出next.value的数组
+ +

4、二维数组按行排序

+ +
function sortArr(arr) {
+    var goNext = true;
+    var entries = arr.entries();
+    while (goNext) {
+        var result = entries.next();
+        if (result.done !== true) {
+            result.value[1].sort((a, b) => a - b);
+            goNext = true;
+        } else {
+            goNext = false;
+        }
+    }
+    return arr;
+}
+
+var arr = [[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]];
+sortArr(arr);
+
+/*(4) [Array(2), Array(5), Array(5), Array(4)]
+    0:(2) [1, 34]
+    1:(5) [2, 3, 44, 234, 456]
+    2:(5) [1, 4, 5, 6, 4567]
+    3:(4) [1, 23, 34, 78]
+    length:4
+    __proto__:Array(0)
+*/
+
+ +

5、使用for…of 循环

+ +
var arr = ["a", "b", "c"];
+var iterator = arr.entries();
+// undefined
+
+for (let e of iterator) {
+    console.log(e);
+}
+
+// [0, "a"]
+// [1, "b"]
+// [2, "c"]
+
+ +

规范

+ + + + + + + + + + + + + + +
规范名称规范状态备注
{{SpecName('ES6', '#sec-array.prototype.entries', 'Array.prototype.entries')}}{{Spec2('ES6')}}首次定义
+ +

浏览器兼容性

+ +
+
+ + +

{{Compat("javascript.builtins.Array.entries")}}

+
+
+ +

相关链接

+ + -- cgit v1.2.3-54-g00ecf