Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环中的Javascript_Javascript_Arrays - Fatal编程技术网

循环中的Javascript

循环中的Javascript,javascript,arrays,Javascript,Arrays,这个for循环有点问题,我相信它的“参与者”在for-in循环中。这会打印出一个演员姓名所在的数字 来自Ruby,这看起来像是一个.each方法在数组中的每个元素上迭代,但是很明显这是一个有点不同的过程。有人能解释为什么这不起作用吗 今天刚收到JS。谢谢。从该链接: for…in循环以任意顺序迭代对象的属性 以及: for..in不应用于迭代索引顺序很重要的数组。数组索引只是具有整数名称的可枚举属性,在其他方面与常规对象属性相同。无法保证for…in将以任何特定顺序返回索引,并返回所有可枚举属性

这个for循环有点问题,我相信它的“参与者”在for-in循环中。这会打印出一个演员姓名所在的数字

来自Ruby,这看起来像是一个.each方法在数组中的每个元素上迭代,但是很明显这是一个有点不同的过程。有人能解释为什么这不起作用吗

今天刚收到JS。谢谢。

从该链接:

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是每个项的索引,而不是项本身吗?谢谢。刚刚拉上了链接。