0

검색 중이지만 명확한 답을 얻을 수 없습니다. (나는 자바 스크립트의 초보자이며 이것은 콘솔 내부의 테스트/연습입니다.) for 루프, 전역 범위 내에서 로컬 범위를 만들 수 있도록하려면 어떻게 객체 배열을 변수에 추가 할 수 있습니까? 예 : 사용자가 "별"이라는 변수 (프롬프트) 안에 얼마나 많은 별 (등급)을 설정 할지를 원합니다. 그런 다음 객체/배열 내부의 movieDb 변수에서 "rating :"이라고하는 변수 별을 호출 할 수 있어야합니다. 변수 별을 사용하여 사용자가 다른 정보와 함께 입력하는 별을 로그 할 수 있습니다. 허용되었거나 다른 접근 방식이 있습니까?for 루프 내에서 전역 범위로 로컬 범위 만들기

var movieDb =[ 
    { 
    haswatched : "i", 
    title : "In Burges", 
    rating : stars, 
    }, 
    { 
    haswatched : "i", 
    title : "Frozen", 
    rating : stars, 
    }, 
    { 
    haswatched : "i", 
    title : "Mad Max", 
    rating : stars, 
    }, 
] 

for (var i = 0; i < movieDb.length ; i++) { 
    var w = prompt("did you watch the movie?") 
    if (w === 'yes'){//first IF 
    movieDb[i].haswatched = "you have watched"; 
    var r = prompt("would you like to rate us?"); 
     if (r === "yes") {//nested in first IF 
      var stars = prompt("Enters Stars"); 
      alert("Thanks for rating & Watching!") 
     } else if(r === "no"){ //nested in second IF 
      alert("You did not rate, Thanks for watching!") 
     } 
    } 
    else if (w === "no"){ //first ELSE IF 
    movieDb[i].haswatched = "you have not seen"; 
    } 
console.log(movieDb[i].haswatched + " " + "\""+movieDb[i].title+"\"" + " -" + movieDb[i].rating); 
}' 

답변

0

...

var movieDb = [ 
    { 
    haswatched : "i", 
    title : "In Burges", 
    rating : 0, 
    }, 
    { 
    haswatched : "i", 
    title : "Frozen", 
    rating : 0, 
    }, 
    { 
    haswatched : "i", 
    title : "Mad Max", 
    rating : 0, 
    }, 
]; 

for (var i = 0; i < movieDb.length ; i++) { 
    var w = prompt("did you watch the movie " + movieDb[i].title + "?") 
    if (w === 'yes'){//first IF 
     movieDb[i].haswatched = "you have watched"; 
     var r = prompt("would you like to rate us?"); 
     if (r === "yes") {//nested in first IF 
      var stars = prompt("Enters Stars"); 
      movieDb[i].rating = stars; 
      alert("Thanks for rating & Watching!") 
     } else if(r === "no"){ //nested in second IF 
      alert("You did not rate, Thanks for watching!") 
     } 
    } else if (w === "no"){ //first ELSE IF 
     movieDb[i].haswatched = "you have not seen"; 
    } 
} 

console.log(movieDb); 

정보 주셔서 https://jsfiddle.net/ramsmxms/

+0

내 코드를 비교 한 후 IF 문에서 변수 목록에 내 개체 목록의 등급 값을 지정하지 않았다는 것을 깨달았습니다. 이것은 확실히 다른 모든 대답들과 함께 도움이되었습니다. 나는 내 문제에 대한 해결책이라고 생각하는 잘못된 질문을하고 있었다고 생각한다. 감사!! – Andyg123

0

var의 javascript에는 기능 범위가 있습니다. 따라서 루프 내부에서 정의하더라도 루프 외부에서 사용할 수 있습니다. 루프 전에 console.log를 수행하면 값은 정의되지 않으며 루프 이후에 수행하면 값은 루프 내에서 사용 가능한 마지막 값이됩니다. 일들을 범위 (루프 내부의 로컬 범위)로 블럭하려면 let & const를 사용하십시오. ES6에서 사용할 수 있으며 모든 주요 브라우저가 지원합니다. 이

해피 학습

Vatsal 도움이 될 것입니다

희망

나는 내가 뭔가 바보 같은 나에게 답을 말한다면 날 수정 주저하지 말고 아주 잘 당신의 질문을 이해 확실하지 않다
+0

감사 ving! – Andyg123

0

당신이 묻지 않은 질문.

for 루프 범위 내에서 변수를 정의하는 가장 좋은 방법은 let으로 선언하는 것입니다.

var i = "aaa"; 

for (let i = 0; i < 10; i++) { 
    console.log(i); // => 0...9 
} 

console.log(i); // => "aaa" 

내가 직면 한 문제는 stars이 존재하지 않는다고 생각합니다.
당신은 false 또는 null (또는 무엇이든 값)으로 설정 한 다음 값이있을 때 프롬프트로 얻을하거나 설정할 수를 설정할 수 있습니다 :

{ 
haswatched : "i", 
title : "In Burges" 
} 

... 

movieDb[i].stars = stars; 

나는 '돈을 처음에 Int 값으로 설정하는 것이 더 빠르다는 것을 알지만,이 경우에는 그다지 개선되지 않아서별로 중요하지 않을 것입니다.

는 희망이 도움이

편집 :

루프 내부에 대해 let 범위는 여기에 예입니다 :

<ul> 
    <li>a</li> 
    <li>b</li> 
    <li>c</li> 
    <li>d</li> 
    <li>e</li> 
</ul> 

<script> 
var lis = document.querySelectorAll('li'); 
for (let i = 0; i < lis.length; i++) { 
    lis[i].addEventListener('click', function(){ 
     console.log(i); 
    }); 
} 
</script> 

리, 비록 쇼 위치 (0 ~ 4)를 클릭하면 :

<script> 
var lis = document.querySelectorAll('li'); 
for (var i = 0; i < lis.length; i++) { 
    lis[i].addEventListener('click', function(){ 
     console.log(i); 
    }); 
} 
</script> 

5를 표시합니다 (i는 lea 나는 당신이 달성하려고하는 것을 이해한다면,이 도움이 될 생각 루프)

+0

예 별 개체 목록이 존재하지 않았지만 등급 값이 대신 있었고 변수 별을 동등한 값에 추가하려고했습니다. 나는 자기 자신을 혼란스럽게하고 If 문에서 등급 변수를 stars 변수로 업데이트하지 않았다. 이 코멘트 위의 사람은 내가 그것을 깨닫는 것을 도왔다.. 다른 것을 위해 감사해라!! – Andyg123