lodash

2016-07-10 11 views
1

には、次のJS配列与える使用して、配列内の値を持つオブジェクトを検索する方法:ループ内の1つのポイントでlodash

vm.todayShifts = []; 
vm.todayShifts['am'] = 
    { 
     station: "1", 
     slots: { 
     position: "AO", 
     name: "Person One" 
     }, 
     slots: { 
     position: "FF", 
     name: "Person Two" 
     }, 
     slots: { 
     position: "PFF", 
     name: "Person Three" 
     }, 
    }, 
    { 
     station: "2", 
     slots: { 
     position: "AO", 
     name: "Person Four" 
     }, 
     slots: { 
     position: "FF", 
     name: "Person Fve" 
     }, 
     slots: { 
     position: "PFF", 
     name: "Person Six" 
     }, 
    }, 
    ], 
todayShifts['pm'] = 
    { 
     station: "1", 
     slots: { 
     position: "AO", 
     name: "Person Seven" 
     }, 
     { 
     position: "FF", 
     name: "Person Eight" 
     }, 
     { 
     position: "PFF", 
     name: "Person Nine" 
     }, 
    }, 
    { 
     station: "2", 
     slots: { 
     position: "AO", 
     name: "Person Ten" 
     }, 
     { 
     position: "FF", 
     name: "Person Eleven" 
     }, 
     { 
     position: "PFF", 
     name: "Person Twelve" 
     }, 
    }, 
    ] 

を、私はstation.idと放送時間帯(午前または午後)の値を持っている、と私todayShift配列に、適切なdayPartにあり、station.id値を持つオブジェクトが含まれているかどうかを調べる必要があります。存在する場合はそのオブジェクトを返します。私はlodashでこれを試してみた:

 if (typeof vm.todayShifts[dayPart] != 'undefined') { 
     var shift = _.find(vm.todayShifts[dayPart], {'station': station.id}); 
     } 

が、基準(例えば、放送時間帯=「AM」と駅= 1)に一致するデータがある場合でも何も返されません。

これはすでにループしています(Angular Bootstrapカレンダーのcustom cell templateの場合はcell modifier)ので、このコントローラが呼び出されるまで毎回todayShiftsをループしたくありません。ページあたり30回。

閉じる?または、オブジェクトをチェックして取得する簡単な方法はありますか?

ありがとうございました。

+1

あなたがオブジェクトのようにそれを処理している場合は、なぜ '配列をtodayShifts'ています。私はjavascriptがこのような奇妙なことをすることができるのは知っていますが、なぜ... – Damon

答えて

0

は、結果をコンソールに探す代わりに

var shift = _.find(vm.todayShifts[dayPart], function(shift){ return shift.station == station.id }); 
+0

2番目のオプションは完全に機能します。ありがとう。 – wonder95

1

を関数を使用します。

vm = Object; 
 
vm.todayShifts = []; 
 
vm.todayShifts['am'] = [ 
 
    { 
 
     station: "1", 
 
     slots: [{ 
 
\t   position: "AO", 
 
\t   name: "Person One" 
 
\t  }, 
 
\t  { 
 
\t   position: "FF", 
 
\t   name: "Person Two" 
 
\t  }, 
 
\t  { 
 
\t   position: "PFF", 
 
\t   name: "Person Three" 
 
\t  }] 
 
    }, 
 
    { 
 
     station: "2", 
 
     slots: [{ 
 
\t   position: "AO", 
 
\t   name: "Person Four" 
 
\t  }, 
 
\t  { 
 
\t   position: "FF", 
 
\t   name: "Person Fve" 
 
\t  }, 
 
\t  { 
 
\t   position: "PFF", 
 
\t   name: "Person Six" 
 
\t  }] 
 
    }, 
 
    ], 
 
vm.todayShifts['pm'] = [ 
 
    { 
 
     station: "1", 
 
     slots: [{ 
 
\t   position: "AO", 
 
\t   name: "Person Seven" 
 
\t  }, 
 
\t  { 
 
\t   position: "FF", 
 
\t   name: "Person Eight" 
 
\t  }, 
 
\t  { 
 
\t   position: "PFF", 
 
\t   name: "Person Nine" 
 
\t  }] 
 
    }, 
 
    { 
 
     station: "2", 
 
     slots: [{ 
 
\t   position: "AO", 
 
\t   name: "Person Ten" 
 
\t  }, 
 
\t  { 
 
\t   position: "FF", 
 
\t   name: "Person Eleven" 
 
\t  }, 
 
\t  { 
 
\t   position: "PFF", 
 
\t   name: "Person Twelve" 
 
\t  }] 
 
    } 
 
    
 
    ] 
 
    
 
    function getShift(dayPart, stationId){ 
 
    if (typeof vm.todayShifts[dayPart] != 'undefined') { 
 
      var shift = _.filter(vm.todayShifts[dayPart], {'station': stationId}); 
 
      return shift; 
 
     } 
 
     
 
    } 
 
    var ob = getShift("pm", "2"); 
 
    
 
    console.log(ob);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>