2012-05-21 10 views
6

thisがjquery .each()ループの場合、次のjavascriptオブジェクトからthis(特定の 'イベント')を削除できません。jQuery .each()のjavascriptオブジェクトからこれを削除します

weatherData:

{ 
    "events":{ 
     "Birthday":{ 
      "type":"Annual", 
      "date":"20120523", 
      "weatherType":"clouds", 
      "high":"40", 
      "low":"30", 
      "speed":"15", 
      "direction":"0", 
      "humidity":"0" 
     }, 
     "Move Out Day":{ 
      "type":"One Time", 
      "date":"20120601", 
      "weatherType":"storm", 
      "high":"80", 
      "low":"76", 
      "speed":"15", 
      "direction":"56", 
      "humidity":"100" 
     } 
    }, 
    "dates":{ 
     "default":{ 
      "type":"clouds", 
      "high":"40", 
      "low":"30", 
      "speed":"15", 
      "direction":"0", 
      "humidity":"0" 
     }, 
     "20120521":{ 
      "type":"clear", 
      "high":"60", 
      "low":"55", 
      "speed":"10", 
      "direction":"56", 
      "humidity":"25" 
     } 
    } 
} 

これは.each()ループの収縮したバージョンです:

$.each(weatherData.events, function(i){ 
    if(this.type == "One Time"){ 
     delete weatherData.events[this]; 
    } 
}) 
+0

あなたは単にweatherData.eventsを空に良いかもしれない(weatherData.events = {})、それを削除しようとするのではなく。私が最近聞いたインタビューのv8作者の一人によると、オブジェクトのメンバを削除すると、そのオブジェクトはハッシュに変換された後、オブジェクトに戻されますが、オブジェクト内の再割り当てにはobject-> hash - >オブジェクトパフォーマンスのペナルティ。 – BrianFreud

+0

それは良いアドバイスのように聞こえる。もし私がその内容のいくつかを保存しようとしていなければ、私はそれをするでしょう。私は特定の出来事だけを削除していました。私は私のポストをオープニングの説明でより具体的に更新する予定です。 – fishpen0

答えて

7

あなたは、文字列(プロパティ名)が期待されているオブジェクトを使用しています。私はあなたがしたいと考えている:

$.each(weatherData.events, function(i){ 
    if(this.type == "One Time"){ 
     delete weatherData.events[i]; 
     // change is here --------^ 
    } 
}); 

... $.eachので、あなたはiとして受け入れているイテレータ関数の最初の引数として、プロパティ名(例えば、"Move Out Day")に渡します。オブジェクトからそのプロパティを削除するには、その名前を使用します。

Gratuitous live example | source

+0

関数のパラメータに追加する時間があってもイテレータを試していないと愚かな気がします。どうもありがとう! – fishpen0

1

あなたは項目の名前が必要ですが、それを参照する必要はありません。コールバック関数のパラメータを使用します。

$.each(weatherData.events, function(key, value){ 
    if(value.type == "One Time"){ 
    delete weatherData.events[key]; 
    } 
}); 

参考:http://api.jquery.com/jQuery.each/

関連する問題