2016-10-06 3 views
-2

私はいくつかのデータを含むオブジェクトを持っています。最初の次元は1年の月を表す1から12までです。その中で、私はその月の「真」である特定のIDの持っている:このデータを使用するにはオブジェクトを合理化すると、このデータを配列として作成できますか?

var monthData = { 
    1: { 219: true, 474: true }, 
    2: { 219: true, 391: true }, 
    3: { 219: true }, 
    ... 
}; 

を、私はmonth(値1-12)を検索し、その月のID(例えば391) 。 IDは、その月内に存在する場合は、私が持っている完全なデータを見たとき、私はreturn true;

return !!monthData[month][ID]; 

しかし、繰り返しが多いようです。たとえば、毎月219: trueを繰り返しています。私もすべてのIDの後にtrueを繰り返しています - 実際にはIDの存在が真実になっているので、これが洗練されているように感じます。

これを代わりに配列データとして保存できますか?これを繰り返し、必要なだけデータを返す簡単な方法はありますか?あなたは、配列の配列としてすべてのデータを保存し、データを検索するindexOf()を使用することができ

findIDByMonth : function (month,ID) { 
       var monthData = { 
        1: { 219: true, 474: true }, 
        2: { 219: true, 474: true }, 
        3: { 219: true, 474: true }, 
        4: { 219: true, 296: true, 391: true, 474: true, 578: true, 917: true, 987: true, 1036: true }, 
        5: { 219: true, 296: true, 391: true, 474: true, 578: true, 917: true, 987: true, 1036: true }, 
        6: { 219: true, 391: true, 474: true, 578: true, 834: true, 917: true, 987: true, 1036: true }, 
        7: { 219: true, 251: true, 391: true, 474: true, 578: true, 834: true, 917: true, 987: true, 1036: true }, 
        8: { 219: true, 251: true, 391: true, 474: true, 526: true, 578: true, 834: true, 917: true, 987: true, 1036: true, 1092: true }, 
        9: { 219: true, 251: true, 296: true, 391: true, 474: true, 526: true, 578: true, 897: true, 917: true, 987: true, 1036: true, 1092: true }, 
        10: { 219: true, 251: true, 391: true, 474: true, 526: true, 578: true, 897: true, 917: true, 987: true, 1036: true, 1092: true }, 
        11: { 219: true, 474: true, 987: true, 1036: true }, 
        12: { 219: true, 474: true } 
       }; 
       return !!monthData[month][ID]; 
      } 

答えて

1

あなたの機能にこのようなものを置くことができます。あなたが言及したように、配列は読みやすさのための良い選択となると思います。コードの長さを大幅に短縮することはできず、選択している月がはっきりしているので、配列に変更する必要がないように見えるため、外側のオブジェクトは変更しないでください。

var monthData = { 
    1: [219, 474], 
    2: [219, 391], 
    ... 
}; 

return !!monthData[month].includes(ID); 
0

:下回る

のフル機能。

function findIDByMonth(month,ID) { 
    var monthData = [ 
     [219, 474], 
     [219, 474], 
     [219, 474], 
     [219, 296, 391, 474, 578, 917, 987, 1036], 
     [219, 296, 391, 474, 578, 917, 987, 1036], 
     [219, 391, 474, 578, 834, 917, 987, 1036], 
     [219, 251, 391, 474, 578, 834, 917, 987, 1036], 
     [219, 251, 391, 474, 526, 578, 834, 917, 987, 1036, 1092], 
     [219, 251, 296, 391, 474, 526, 578, 897, 917, 987, 1036, 1092], 
     [219, 251, 391, 474, 526, 578, 897, 917, 987, 1036, 1092], 
     [219, 474, 987, 1036], 
     [219, 474]]; 

    return monthData[month - 1].indexOf(ID) !== -1; 
} 

月間のIDの繰り返しについては、それが静的なデータでない限り、それほど多くはありません。

+0

@Aschabです。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf – Archer

+0

あなたは間違っていた、コメントを削除しました、悲しい:P – Aschab

+0

@Aschabいいえ心配:) – Archer

0
findIDByMonth : function (month,ID) { 
       var monthData = [ 
        [ 219, 474 ], 
        [ 219, 474 ], 
        [ 219, 474 ], 
        [ 219, 296, 391, 474, 578, 917, 987, 1036 ], 
        [ 219, 296, 391, 474, 578, 917, 987, 1036 ], 
        [ 219, 391, 474, 578, 834, 917, 987, 1036 ], 
        [ 219, 251, 391, 474, 578, 834, 917, 987, 1036 ], 
        [ 219, 251, 391, 474, 526, 578, 834, 917, 987, 1036, 1092 ], 
        [ 219, 251, 296, 391, 474, 526, 578, 897, 917, 987, 1036, 1092 ], 
        [ 219, 251, 391, 474, 526, 578, 897, 917, 987, 1036, 1092 ], 
        [ 219, 474, 987, 1036 ], 
        [ 219, 474 ] 
       ]; 
       return monthData[month-1].includes(ID); 
      } 
0

それはあなたがあなたの配列としてデータを保存したいと言うとき、あなたが探しているものを実際に明確ではありません。

あなたは完全にあなたのデータをフラット化したい場合は、このようなものになると思いますので、あなたは、フォームmonth-idで、代わりに文字列の配列を作成することができます。

var monthData=["1-219", "1-474", "2-219", "2-474"....]; 

配列が含まれている場合、あなたは確認することができます月-IDの組み合わせ

return monthData.includes(month+"-"+ID); 

あなたの目的は、特定の項目のexistanceを確認するためであれば、あなたの元の表現は、配列を反復することは、よりexpensiいる間に、オブジェクトのプロパティにアクセスする、一定時間内に行われるため、最良でありますあなたの目的が特定のIDの存在を確認することであるならば、ちょっとおかしなことにあなたのデータが最も効率的に表現されていますが、

関連する問題