for..of循环如何从数组中取值
How does for..of loop get values from Array
我有这段代码,
let array = ["cj1rdd9fc00013f69ccln57g0", "cj1rdda8x00023f69g9281ay8"];
for (let [key, value] of array) {
console.log(key, value);
}
我希望 0 cj1rdd9fc00013f69ccln57g0 和 1 cj1rdda8x00023f69g9281ay8 作为输出。我在这里错过了什么?如何获得所需的输出?
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?
这段代码,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);
}
让我们尝试了解这里发生的事情:
根据 MDN-Docs,for..of
为分配提供每次迭代的值。
因此,当您执行 for(var v of array)
时,v
将保持价值。
现在,当您执行 let [key, value]
时,您使用的是 Destructuring Assignment。
它的作用是,对于给定的变量列表,它会在相应的索引值处赋值。
因此,在 let [a,b] = [10, 20]
、a=10
和 b=20
中。
回到你的例子,
let [key, value] of array,
被评估为 let [key, value] = "cj1rdd9fc00013f69ccln57g0"
,因此 key
在第 0 个索引处保持值,a.k.a 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)
})
这是一个解构赋值。这将适用于 es6 Maps 而不是 Arrays 。对于数组,您可以只使用 for of 循环。
如果你想在每次迭代中使用一些奇特的迭代来获取数组的值和索引,试试这个。
let array = ["cj1rdd9fc00013f69ccln57g0", "cj1rdda8x00023f69g9281ay8"];
array.map((value, index) => {
console.log(index, key);
});
这里有一些底层解释。
for..of
循环适用于 iterables。在每次迭代中,它调用 iterator.next().value
来获取值。标准 Array
实现有 两种迭代器 - 一种 returns 仅值,另一种 returns [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]
我有这段代码,
let array = ["cj1rdd9fc00013f69ccln57g0", "cj1rdda8x00023f69g9281ay8"];
for (let [key, value] of array) {
console.log(key, value);
}
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?
这段代码,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);
}
让我们尝试了解这里发生的事情:
根据 MDN-Docs,for..of
为分配提供每次迭代的值。
因此,当您执行 for(var v of array)
时,v
将保持价值。
现在,当您执行 let [key, value]
时,您使用的是 Destructuring Assignment。
它的作用是,对于给定的变量列表,它会在相应的索引值处赋值。
因此,在 let [a,b] = [10, 20]
、a=10
和 b=20
中。
回到你的例子,
let [key, value] of array,
被评估为 let [key, value] = "cj1rdd9fc00013f69ccln57g0"
,因此 key
在第 0 个索引处保持值,a.k.a 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)
})
这是一个解构赋值。这将适用于 es6 Maps 而不是 Arrays 。对于数组,您可以只使用 for of 循环。
如果你想在每次迭代中使用一些奇特的迭代来获取数组的值和索引,试试这个。
let array = ["cj1rdd9fc00013f69ccln57g0", "cj1rdda8x00023f69g9281ay8"];
array.map((value, index) => {
console.log(index, key);
});
这里有一些底层解释。
for..of
循环适用于 iterables。在每次迭代中,它调用 iterator.next().value
来获取值。标准 Array
实现有 两种迭代器 - 一种 returns 仅值,另一种 returns [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]