2016-12-21 14 views
0

に」トンの仕事をdoesnの私は、関数を書いた:いくつかの変数がvuejs

getClassTable() { 
    var classNormalData = this.classData.normal, 
     alterClasses = this.classData.alter.classes, 
     classTable = []; 

    for(var day in classNormalData) { 
    classTable.push(classNormalData[day]); 
    } 

    if(alterClasses != []) { 
    alterClasses.forEach(function(item, index) { 
     var date = item.time, 
      lesson = item.lesson; 
     for(var i = 0; i < 4; i++){ 
     var time = this.dates[i], 
      classes = classTable[i][lesson]; 
     if(time == date) { 
      classes.subject = item.subject; 
      break; 
     } 
     } 
    }, this) 
    } 
    this.classTable = classTable; 
} 

}

しかしclasses.subject = item.subject作品、代が間違っていました。それは変更this.classDataのように見えました。変数classNormalDataclassTableはうまく機能しませんでした。 なぜですか?

シモンズ:this.classDataは、オブジェクトへのポインタとして、JavaScriptではここ

computed: { 
    classData() { 
    return this.$localStorage.get('classList'); 
    }, 
} 
+0

jsfiddleで再現可能なvue変数をコンソールに追加することもできますか? – Saurabh

+0

ありがとうございます。私はちょうど今それを解決する方法を知っていた。これは、objを変数として設定すると、実際には元のオブジェクトにリンクするためです。私はアプローチが 'var newObj = JSON.parse(JSON.stringify(obj))' – Xile

答えて

0

変数を定義しています。変数に代入するときは、変数を別のオブジェクトにrepointingするだけで、オブジェクトを変更することはありません。したがって、割り当てられたオブジェクトを変更すると、オリジナルも変更されます。

これを解決するには、元のオブジェクトの複製である新しいオブジェクトを作成する必要があります。 これを行うための複数の方法で、あなたがコメントで指摘したように、1つの方法があります。

var newObj = JSON.parse(JSON.stringify(obj)) 

がこれを行うには良いと効率的な方法はObject.assignを使用してのように、あります

var newObj = Object.assign({}, obj) 

underscorelodashクローンメソッドも提供します。

他の解決方法はanswerです。

関連する問題