2017-02-19 87 views
-1

javascript初学者。 “The for ... in”问题。通过循环用于...的对象在

应用于数组对象,但无法定义日期。

<!doctype html> 
 
<html> 
 
<head> 
 
<meta charset="UTF-8"> 
 
<title>Loops and Control</title> 
 
</head> 
 

 
<body> 
 
<script> 
 
    var days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']; 
 
    var message = ""; 
 
    for (i in days) { 
 
    message += 'Day ' + i + ' is' 
 
    day[i] + '\n'; 
 
    } 
 
\t alert(message); 
 
\t </script> 
 
</body> 
 
</html>

+0

究竟什么是你的问题?你错过了一个'+','日'应该是'天'。你的浏览器的控制台应该告诉你什么是错的。 –

+0

它不是它是一个数组的对象。并尝试使用reduce而不是循环 – user93

+0

使用map或'for(var i = 0; i mplungjan

回答

1

有几个问题:

  1. 您已尝试使用day[i],但您没有day变量(它被称为days)。
  2. for-in不适用于在数组条目中循环; details of your various options here
  3. 你缺少你的代码是下降+' is'
  4. 猎物The Horror of Implicit Globals(这是我的一点贫血博客的一篇文章)   —需要声明i

所以:

var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; 
 
var message = ""; 
 
for (var i = 0; i < days.length; ++i) { 
 
    message += 'Day ' + i + ' is ' + days[i] + '\n'; 
 
} 
 
alert(message);

或者,阵列具有多种功能,你可以用做他们的项目操作。有forEach,它通过条目循环:

var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; 
 
var message = ""; 
 
days.forEach(function(day, i) { 
 
    message += 'Day ' + i + ' is ' + days[i] + '\n'; 
 
}); 
 
alert(message);

...或reduce,这意味着正是这种使用案例:构建从阵列中的条目结果:

var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; 
 
var message = days.reduce(function(m, day, i) { 
 
    return m + 'Day ' + i + ' is ' + days[i] + '\n'; 
 
}, ""); 
 
alert(message);

+0

你很棒。非常感谢你。 – Mimose

+0

@Micco:不用担心。我错过了一些东西,所以我在上面添加了#4。 –

1

您应该使用for遍历数组进行迭代。不建议将阵列使用For in

否则,你也可以使用forEach

var days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']; 
 
var message = []; 
 

 
for(var i = 0; i < days.length; i++) { 
 
    message.push('Day', (i + 1), 'is', days[i] + '\n'); 
 
} 
 

 
alert(message.join(' '));

0

数组的名称是对内部的拼写错误。它应该是:

for (i in days) { 
    message += 'Day ' + i + ' is' + days[i] + '\n'; 
} 

i将采取指数的值,并使用它来访问原始数组

+2

不建议将for..in用于数组 – mplungjan

0

你可以做到这一点与减少阵列

const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; 
 
const newLine = (acc, curr) => acc += curr + '\n'; 
 
const message = days.reduce(newLine, ''); 
 
console.log(message)
的方法

+1

OP是初学者。 ES6不适合初学者 – mplungjan

+0

@mplungjan ..这个人被ramda迷住了。走过他的答案注意 –