0

私は検索していますが、明確な答えは得られません。 (私はjavascriptの初心者ですが、これはコンソール内のテスト/練習です)どのようにforループ、グローバルスコープ内でローカルスコープを作ることができるので、オブジェクトの配列を変数に追加することができます。例: "stars"という名前の変数(プロンプト)の中に、ムービーが持つ星の数を設定する必要があります。次に、オブジェクト/配列内の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

感謝を助けるべきだと思います!! – 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

yes星のオブジェクトリストは存在しませんでしたが、代わりに評価値があり、変数の星をその等価値に追加しようとしていました。私は自分自身を混乱させていましたが、Ifステートメントのratingオブジェクトをstars変数で更新しませんでした。このコメントの上の男は私がそれを実現するのを助けた..他のありがとう!! – Andyg123

関連する問題