for..of循环如何从Array获取值

时间:2017-04-21 05:14:32

标签: javascript ecmascript-6 for-of-loop

我有这段代码,



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



 我期望,0 cj1rdd9fc00013f69ccln57g0和1 cj1rdda8x00023f69g9281ay8作为输出。我在这里想念的是什么?如何获得所需的输出?

6 个答案:

答案 0 :(得分:4)

以下是一些有用的解释。

for..of循环适用于iterables。在每次迭代时,它都会调用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]

答案 1 :(得分: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个索引的值,a.k.a c,值保留j

如何获得所需的输出

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

还有其他机制,例如.map.filter.some.every.reduce,但它们有自己的用例,可以基于处理逻辑。

Array.forEach



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

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




答案 2 :(得分: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);
}

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

How do you get the loop counter/index using a for-in syntax in JavaScript?

答案 3 :(得分: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);
    }
&#13;
&#13;
&#13;

答案 4 :(得分:0)

这是一项解构任务。这适用于es6 Maps而不适用于Arrays。对于数组,您只需使用for循环。

答案 5 :(得分:-1)

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

let array = ["cj1rdd9fc00013f69ccln57g0", "cj1rdda8x00023f69g9281ay8"];
array.map((value, index) => {
    console.log(index, key);
});