2015-11-24 291 views
1
var movies = 
[ 
{name: "In Bruges", rating:"4.7", seen:false}, 
{name: "Frozen", rating: "4.5", seen:true}, 
{name: "Lion King", rating:"5", seen:true}, 
] 


for (var i = 0; i < movies.length; i++) { 
    var result = "You have "; 
    if(movies.seen === true){ 
     result += "watched "; 
    } 
    else{ 
     result += "not seen "; 
    } 
    result += "\"" + movies.name + "\" - "; 
    result += movies.rating + " stars" 
    console.log(result) 
}; 

You have not seen "undefined" - undefined stars is the result in chrome however you should see You have seen/not seen "movie name" - "rating" stars. 

我需要使用for循环打印每个我观看过的电影和评级,以及我是否看过它。问题是为什么它没有定义?代码应该看movie.rating并且只替换那里的值?有人可以检查我的代码并帮助我进行for循环吗?Javascript对象返回undefined

+0

参考索引,'如果(movies.seen ===真)''到如果(电影[I] .seen ===真)'数组元素。或使用'forEach'循环。 – rajuGT

+1

@rajuGT真棒,它加入我的movie.seen /名称/评价使它的工作。谢谢! –

回答

3

movies是一个数组movies.seen将不起作用使用movies[i].seen和类似明智的其它性质

1

变化movies.seenmovies.ratingmovies.namemovies[i].seenmovies[i].rating,和movies[i].name

1

使用索引来访问数组的项目;例如movies[i]

for (var i = 0; i < movies.length; i++) { 
    var result = "You have "; 
    if(movies[i].seen === true){ 
     result += "watched "; 
    } 
    else{ 
     result += "not seen "; 
    } 
    result += "\"" + movies[i].name + "\" - "; 
    result += movies[i].rating + " stars" 
    console.log(result) 
} 

或者您可以在数组元素存储在一个变量,并使用它像这样:

for (var i = 0; i < movies.length; i++) { 
    var movie = movies[i]; 
    var result = "You have "; 
    if (movie.seen) { 
     result += "watched "; 
    } 
    else { 
     result += "not seen "; 
    } 
    result += '"' + movie.name + '" - '; 
    result += movie.rating + " stars"; 
    console.log(result); 
} 
0

Here is a working Plunker给你看它的工作。 :)

var movies = 
[ 
{name: "In Bruges", rating:"4.7", seen:false}, 
{name: "Frozen", rating: "4.5", seen:true}, 
{name: "Lion King", rating:"5", seen:true}, 
] 


for (var i = 0; i < movies.length; i++) { 
    var result = "You have "; 
    if(movies[i].seen === true){ 
     result += "watched "; 
    } 
    else{ 
     result += "not seen "; 
    } 
    result += "\"" + movies[i].name + "\" - "; 
    result += movies[i].rating + " stars" 
    alert(result) 
} 

您试图访问的电影称为seemnamerating的性质,但电影有3个对象的索引,从0到2

0

您正在使用内循环的电影和电影不包含这些属性。 它是永诺安全使用forEach循环而遍历数组

这样做

movies.forEach(function(movie){ 
var result = "You have "; 
    if(movie.seen === true){ 
     result += "watched "; 
    } 
    else{ 
     result += "not seen "; 
    } 
    result += movie.name + " - "; 
    result += movie.rating + " stars"; 
    console.log(result); 

}); 
0

我建议使用一点点其他的方法来遍历数组和检查,如果一部电影已经看到。

var movies = [ 
 
    { name: "In Bruges", rating: "4.7", seen: false }, 
 
    { name: "Frozen", rating: "4.5", seen: true }, 
 
    { name: "Lion King", rating: "5", seen: true }, 
 
]; 
 

 
movies.forEach(function (movie) { 
 
    var result = "You have ";    
 
    result += movie.seen ? "watched " : "not seen ";    
 
    result += "\"" + movie.name + "\" - "; 
 
    result += movie.rating + " stars" 
 
    document.write(result + '<br>'); 
 
});