2017-10-29 7 views
0

次のコードがあります。最初の繰り返しでループ用オブジェクトをJavaScriptに複数回追加する

const timeLabels = [ 
 
    { name: "1:00 AM", present: true, label: ["1:00", "2:00"], value: "1:00" }, 
 
    { name: "2:00 AM", present: true, label: ["2:00", "3:00"], value: "2:00"}, 
 
    { name: "3:00 AM", present: true, label: ["3:00", "4:00"], value: "3:00" }, 
 
]; 
 

 
const targetedTimes = [["0:00", "1:00"], ["1:00", "2:00"]] 
 
    
 
    let actualTime = []; 
 

 
    console.log("getting time"); 
 
    console.log("start: the actualTime is", actualTime); 
 
    for (var j = 0; j < timeLabels.length; j++) { 
 
     console.log("x"); 
 
     var currItem = timeLabels[j]; 
 
     var label = JSON.stringify(currItem.label); 
 
     var adTime = JSON.stringify(targetedTimes); 
 
     if (adTime.indexOf(label) >= 0) { 
 
      currItem.present = true; 
 
     } else { 
 
      currItem.present = false; 
 
     } 
 
     console.log("the current item is", currItem); 
 
     actualTime.push(currItem); 
 
     console.log("The actual time is", actualTime); 
 
    }

、currItemは

{name: "1:00 AM", present: true, label: Array(2), value: "1:00"} 

である。しかしactualTimeは

[{name: "1:00 AM", present: true, label: Array(2), value: "1:00"}, 
    {name: "2:00 AM", present: false, label: Array(2), value: "2:00"}, 
    {name: "3:00 AM", present: false, label: Array(2), value: "3:00"}] 

私はなぜactualTimeリストは三つの値を持つことになりです最初の反復で1を追加しますか?

+0

待ってください。forループの前に 'console.log'はどうしますか?それは何を記録するのですか? – Zeke

+0

ここには何も間違っていません。それは完全に理にかなっています。 – HyperNeutrino

+0

@HyperNeutrinoはconsole.logにcurrItemを1アイテム表示する理由を詳しく説明できますが、実際にリストにプッシュすると最初の繰り返しで3つのアイテムが追加されますか? – lost9123193

答えて

1

何が起こっているのかは、コンソールがオブジェクトへの参照を印刷しているためです(オブジェクト配列はjavascriptのオブジェクトの一種です)ので、印刷してコンソールで読むと、各console.logステートメントは次のようになります。同じ最終配列を指しているので、値は毎回同じです。

Have a look at this similar StackOverflow question for more insight.

私は、ノード上でスクリプトを実行しようと、それは最初の繰り返しで一つだけのアイテムで、各反復に正しく配列をプリントアウトし、ので、あなたのコードは結構です。

関連する問題