0

我有这段代码,

let array = ["cj1rdd9fc00013f69ccln57g0", "cj1rdda8x00023f69g9281ay8"];
for (let [key, value] of array) {
  console.log(key, value);
}
我预计,0 cj1rdd9fc00013f69ccln57g0 和 1 cj1rdda8x00023f69g9281ay8 作为输出。我在这里想念什么?如何获得所需的输出?

4

6 回答 6

4

这里有一些幕后解释。

for..of循环适用于可迭代对象。在每次迭代中,它都会调用iterator.next().value以获取值。标准Array实现有两种迭代器——一种只返回值,另一种返回[key, value]对。如果您需要获取第二种类型的迭代器,请使用array.entries().

let array = ["cj1rdd9fc00013f69ccln57g0", "cj1rdda8x00023f69g9281ay8"];
for (let [key, value] of array.entries()) {
  console.log(key, value);
}

下面是两种迭代器的演示:

var arr = ['a','b'];
var valueIterator = arr[Symbol.iterator]();
valueIterator.next().value; // returns a
valueIterator.next().value; // returns b

var arr = ['a','b'];
var valueKeyIterator = arr.entries();
valueKeyIterator.next().value; // returns [0, a]
valueKeyIterator.next().value; // returns [1, b]
于 2017-04-21T05:50:06.140 回答
2

让我们尝试了解这里发生的事情:

根据MDN-Docsfor..of为分配提供每次迭代的值。

因此,当您这样做时for(var v of array)v将保持价值。

现在,当您这样做时let [key, value],您正在使用称为Destructuring Assignment的东西。

它的作用是,对于给定的变量列表,它将在相应的索引值处分配值。

因此,在let [a,b] = [10, 20]a=10b=20

回到你的例子,

let [key, value] of array,

被评估为let [key, value] = "cj1rdd9fc00013f69ccln57g0",因此key在第 0 个索引处保持值,也就是c保持值j


如何获得所需的输出

您可以使用其他循环机制for,例如array.forEach等。

还有其他机制,如.map, .filter, .some, .every.reduce但它们有自己的用例,可以根据处理逻辑提出建议。

Array.forEach

let array = ["cj1rdd9fc00013f69ccln57g0", "cj1rdda8x00023f69g9281ay8"];

array.forEach(function(value, index){
  console.log(index, value)
})

于 2017-04-21T05:30:38.833 回答
0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of

工作方式for of是每次它只获取值,而不是索引。

let array = ["cj1rdd9fc00013f69ccln57g0", "cj1rdda8x00023f69g9281ay8"];
for (let item of array) {
  console.log(item);
}

如果要包含索引,请参阅此问题:

如何在 JavaScript 中使用 for-in 语法获取循环计数器/索引?

于 2017-04-21T05:20:11.230 回答
0

此代码,Console.log 数组

 let array = ["cj1rdd9fc00013f69ccln57g0", "cj1rdda8x00023f69g9281ay8"];
 var i,j,tempstring;
    for (i=0,j=array.length; i<j; i++) {
        tempstring = array[i];
        console.log(tempstring);
    }

于 2017-04-21T05:22:03.937 回答
0

这是一个解构赋值。这适用于 es6 Maps 而不是 Arrays 。对于数组,您可以只使用 for of loop 。

于 2017-04-21T05:34:41.370 回答
-1

如果你想在每次迭代中使用一些花哨的迭代来获取数组的值和索引,试试这个。

let array = ["cj1rdd9fc00013f69ccln57g0", "cj1rdda8x00023f69g9281ay8"];
array.map((value, index) => {
    console.log(index, key);
});
于 2017-04-21T05:36:52.510 回答