2017-06-16 7 views
1

OKこれは、オブジェクト自体を含むJavaScriptオブジェクトの変数​​です。onclickの間にjavascriptオブジェクトから値を取得できません(未定義を返します)

示すように、私はonclickの機能を持っている:

 if (localStorage.cal) { 
      var dat = JSON.parse(localStorage.cal); 
      console.log(dat); 
      eventMap = dat.map; 
      eventList = dat.list; 
     } 
     $(delAppearance).on('click', function(){ 
      if (lastKey && eventMap[lastKey]) { 
       var e = eventMap[lastKey]; 
       eventList[lastKey] = undefined; 
       delete eventList[lastKey]; 
       calObj.removeEvents(function(event){ 
       return new Date(event.date).toUTCString() == moment(lastKey)._d.toUTCString(); 

       }); 
       localStorage.cal = JSON.stringify({list:eventList, map:eventMap}); 
       lastKey = null; 
       $(delAppearance).hide(); 
      } 
     }); 

だから、最後のキーが現在06/20/2017に設定されています。 06/20/2017には​​のレコードがあります(下の画像を見てください)。私はeventMap[lastKey]にアクセスしようとすると、(私はundefinedを取得し、私は関数を入力することはできませんいくつかの理由についてif(lastKey && eventMap[lastKey])を見てください。

を任意の助けいただければ幸いです。

enter image description here

UPDATE

だから、これから来るように見える:

var calClick = function(target){ 
     clearState(); 
     var d = new Date(target.date._d); 
     var prettyDate = ((d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear()); 
     var hr = new Date().getHours(); 
     var min = new Date().getMinutes(); 
     $(aDate).val(prettyDate); 
     var s; 
     console.log(target); 
     if (s = eventMap[prettyDate]) { 
      lastKey = prettyDate; 
      $(delAppearance).show(); 
      setCurrentState(s); 
     } 

    } 

ここではlastKeyに到達しません。しかし、同じ問題のように思える。私は間違った方法でイベントマップにアクセスしなければなりません。

+0

ここで、eventMapをマップオブジェクトに割り当てていますか? – mjw

+0

@mjw固定質問 – jkushner

+0

最終キーは定義されていますか? – MBurnham

答えて

0

JavaScriptのハッシュコードは、JavaやC#と似ていません。各オブジェクトには独自のハッシュキーがあり、等価性との一貫性はありません。

イベントマップにJSONを解析すると、 "06/20/2017"というオブジェクトのインスタンスが作成されます(コードから型がわかっていない、おそらくDate?)。

あなたはeventListは[lastKey]あなたはまた、「2017年6月20日」のように見えるオブジェクトのインスタンスを使用しているアクセスしようとしています。あなたはあなたが常に同じを返す作るためにアイデンティティ・マップを実装する必要があります地図にアクセスするための別のインスタンスを使用する場合は

let d1 = new Date(2017, 5, 20); 
let d2 = new Date(2017, 5, 20); 
// d1 and d2 are different instances. even though they look the same. 

let mapObject = {}; 
mapObject[d1] = "some value"; 
console.debug(mapObject[d1]); // Will print 'some value' 
console.debug(mapObject[d2]); // Will print null 

d2 = d1; // Now let's make d2 the same instance as d1 
console.debug(mapObject[d2]); // Will now print the *expected* 'some value' 

コードは、以上の千の言葉の価値がありますあなたの定義や "等しい"に従ってオブジェクトが "等しい"場合のインスタンス。

また、新しいインスタンスを割り当てる代わりに、lastKeyに元のオブジェクトを割り当てることもできます。

私は後者をお勧めします。

+0

しかし、console.log(eventMap)を実行すると、オブジェクトが表示されます – jkushner

関連する問題