循环中的Javascript
这个for循环有点问题,我相信它的“参与者”在for-in循环中。这会打印出一个演员姓名所在的数字 来自Ruby,这看起来像是一个.each方法在数组中的每个元素上迭代,但是很明显这是一个有点不同的过程。有人能解释为什么这不起作用吗 今天刚收到JS。谢谢。从该链接:循环中的Javascript,javascript,arrays,Javascript,Arrays,这个for循环有点问题,我相信它的“参与者”在for-in循环中。这会打印出一个演员姓名所在的数字 来自Ruby,这看起来像是一个.each方法在数组中的每个元素上迭代,但是很明显这是一个有点不同的过程。有人能解释为什么这不起作用吗 今天刚收到JS。谢谢。从该链接: for…in循环以任意顺序迭代对象的属性 以及: for..in不应用于迭代索引顺序很重要的数组。数组索引只是具有整数名称的可枚举属性,在其他方面与常规对象属性相同。无法保证for…in将以任何特定顺序返回索引,并返回所有可枚举属性
for…in
循环以任意顺序迭代对象的属性
以及:
for..in
不应用于迭代索引顺序很重要的数组。数组索引只是具有整数名称的可枚举属性,在其他方面与常规对象属性相同。无法保证for…in将以任何特定顺序返回索引,并返回所有可枚举属性,包括具有非整数名称的属性和继承的属性
假设您正在传入一个数组,那么属性就是它所持有的项的索引
这就是您获取索引而不是名称的原因。
如果要保留顺序并打印名称,则需要“传统”for循环,如下所示:
var myArray = new Array();
var increment = 0;
myArray.push('Tom Hanks', 'Pierce Brosnan', 'Will Smith', 'Richard Ayoade');
for (actor in myArray) {
console.log(actor + ' is my #' + increment + ' choice.');
increment++;
}
在本例中,第一个循环将迭代3次,选择“hello”属性以及数组中的其余属性。而第二个只执行数组中的2正式项。在这种情况下,应该使用正确的代码
var myArray = new Array();
var increment = 0;
myArray.push('Tom Hanks', 'Pierce Brosnan');
myArray.hello = "what?";
for (actor in myArray) {
alert(actor + ' is my #' + increment + ' choice.');
increment++;
}
for (var i = 0; i < myArray.length; i++) {
alert(myArray[i] + ' is my #' + (i+1) + ' choice.');
}
它打印出来了
var myArray = new Array(); var increment = 0;
myArray.push('Tom Hanks', 'Pierce Brosnan', 'Will Smith', 'Richard Ayoade');
for (actor in myArray) {
console.log(myArray[actor] + ' is my #' + increment + ' choice.');
increment++; }
简单的答案是:
for in
循环迭代对象的属性。JavaScript中的数组
是一个索引对象。所以,你的例子实际上是这样的:
Tom Hanks is my #0 choice.
Pierce Brosnan is my #1 choice.
Will Smith is my #2 choice.
Richard Ayoade is my #3 choice.
当您使用for/in
代码时
Array[4]
0: "Tom Hanks"
1: "Pierce Brosnan"
2: "Will Smith"
3: "Richard Ayoade"
length: 4
__proto__: Array[0]
actor
是迭代时的属性(0、1、2、3…)
要访问for in
循环中的值,需要按如下方式更新代码:
for (actor in myArray) {
console.log(actor + ' is my #' + increment + ' choice.');
increment++;
}
for (idx in myArray) {
console.log(myArray[idx] + ' is my #' + idx + ' choice.');
}
但是,使用for in
循环迭代数组被认为是一种不好的做法。例如,如果我做了这样的事情:
for (actor in myArray) {
console.log(actor + ' is my #' + increment + ' choice.');
increment++;
}
for (idx in myArray) {
console.log(myArray[idx] + ' is my #' + idx + ' choice.');
}
控制台日志将返回如下内容:
myArray.type = "Actors";
可能不是预期的输出。相反,对于数组迭代,请查看数组的for
循环或forEach
方法
// 'Actors is my type choice'
for(var increment=0,len=myArray.length;increment
您将看到数组元素的索引
请记住,数组是对象
当为(对象中的变量项)使用时,var项
是与值关联的键(属性)
您正在访问数组属性(索引),而不是值
你应该考虑使用数组对象BuIin方法。
for (var increment = 0, len = myArray.length; increment < len; increment += 1) {
console.log(myArray[increment] + ' is my #' + increment + ' choice.');
}
// or...
myArray.forEach(function(actor, increment) {
console.log(actor + ' is my #' + increment + ' choice.');
});
“actor的名称应该在哪里”——你为什么这么认为?因为actor的名称已经被推到数组中,actor被指定为迭代器的术语,actor(在我看来)被指定给数组中的每个元素。然而,情况显然并非如此。我同意数组中存在演员字符串。但是为什么你认为(myArray中的参与者)的{
将把一个字符串值放入actor
?我认为我的想法太鲁比了。正如我所说的,我在这方面的想法类似于。每个方法,其中每个数组元素自动应用于迭代器项。在这种情况下,actor是每个项的索引,而不是项本身吗?谢谢。刚刚拉上了链接。